2009-04-03 9 views
0

J'essaye de comprendre comment afficher un message "sauvé" sur l'écran (avec un effet de fondu courtoisie de JQuery) chaque fois qu'un appel d'AJAX est fait à partir d'un contrôle qui enregistre réellement le formulaire. Le formulaire est relativement compliqué et a 5 UpdatePanels séparés où certains - mais pas tous - des contrôles feront un post-back qui sauvera le formulaire.Comment afficher un message javascript basé sur quel contrôle a tiré AJAX?

Je sais quels contrôles doivent provoquer l'affichage du message de sauvegarde. Cependant, je ne sais pas comment identifier ces commandes lorsque la requête AJAX est terminée. Je pense que je dois ajouter ma logique dans le "endRequestHandler" ci-dessous, mais je peux me tromper.

Révision C'est quelque chose que je voudrais peut-être utiliser sur l'ensemble de mon site. Je dois trouver un mécanisme commun pour indiquer de manière déclarative qu'un contrôle devrait faire apparaître le message "Saved" lorsqu'il est la source d'un post-back. Puis-je mettre quelque chose sur le contrôle qui pourrait être accessible dans InitializeRequestHandler ou EndRequsetHandler (voir ci-dessous)? Peut-être que je devrais juste ajouter un attribut personnalisé que je peux trouver en utilisant JQuery? FIN DE RÉVISION

S'il vous plaît laissez-moi savoir si vous avez besoin de plus amples informations. Merci d'avance pour votre aide!

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler); 

function endRequestHandler(sender, args) { 
    //--check to see if the sender should cause the "Saved" message to display 
    //--use JQuery Fadeout effect to make the "Saved Message" display on the screen 
    // temporarily 
} 

Répondre

0

Pour résoudre le problème, j'ai mis un champ caché sur ma page principale avec id = 'hfSaveMessageText'. Cela tiendra le message à afficher, le cas échéant. J'ai également mis une envergure avec id = 'mpSaveSpot' et le style approprié sur le MasterPage. C'est là que mes messages apparaîtront. J'ai ensuite créé une méthode de serveur qui accepte un System.Web.UI.Page et un message de chaîne à afficher

La méthode obtient une référence au champ masqué sur la page maquette et définit la valeur du message transmis par l'utilisateur (par exemple: "Enregistrer le fichier supprimé" ou "E-mail envoyé"). Le javascript suivant s'exécute sur chaque endRequest de publication asynchrone pour voir si un message doit être affiché. Si c'est le cas, j'affiche le message et l'éteint en 4,5 secondes (avec l'aimable autorisation de JQuery fadeOut).

//--Get an instance of the PageRequestManager so we can 
// designate an end-request handler 
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
//--designed the displayFadeoutMessage as the end request handler 
prm.add_endRequest(displayFadeoutMessage); 

function displayFadeoutMessage() { 
    //--if there is a message to display then show it 
    if ($("#ctl00_hfSaveMessageText").attr("value") != "") { 
     //--add a span to the placeholder span and then fade it out 
     // over 4.5 seconds 
     $("#mpSaveSpot").append("<span id='spanFadeoutMessage' style='background-color:#ddd;'>" + $("#ctl00_hfSaveMessageText").attr("value") + "</span>").fadeOut(4500, function() { 
       //--once the message is faded out then clear the message hidden 
       // field and clear out the message span 
       $("#ctl00_hfSaveMessageText").attr("value", ""); 
       $("#mpSaveSpot").empty(); 
     }); 
    } 
} 

Maintenant, j'ai un mechnism réutilisable pour l'affichage des messages de fantaisie fadeOut sur mon site quelle que soit la page que je suis sur. Problème résolu!

0

Vous pouvez stocker qui a fait l'appel ajax pour commencer, puis dans votre end_request unset la variable que vous avez enregistré dans.

Je suppose qu'il ya un événement begin_request qui vous donne ceci, sinon vous pouvez demander à votre élément d'appeler une fonction en premier qui définit qui initie l'appel, puis faire en sorte que la fonction exécute le rappel.

Modifier

Vous avez répondu à votre question. Ajouter un attribut personnalisé au contrôle.

+0

Merci pour vos commentaires. Je pense que cela fonctionnerait si j'allais être OK avec le codage en dur les contrôles qui devraient provoquer la sauvegarde. J'ai légèrement modifié mes questions pour mieux indiquer mes intentions. – jakejgordon

Questions connexes