Appeler une fonction jquery à partir du code derrière asp.net ne semble pas marcher
Je suis de l'appel d'une fonction jquery après l'insertion d'un enregistrement de base de données...
ScriptManager.RegisterClientScriptBlock(LbOk, typeof(LinkButton), "json",
"topBar('Successfully Inserted');", true);
J'ai inclus dans ma page principale pour l'exécution de la fonction jquery après une publication,
<script type="text/javascript">
function load() {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
}
function EndRequestHandler()
{
topBar(message);
}
function topBar(message) {
alert(a);
var alert = $('<div id="alert">' + message + '</div>');
$(document.body).append(alert);
var $alert = $('#alert');
if ($alert.length) {
var alerttimer = window.setTimeout(function() {
$alert.trigger('click');
}, 5000);
$alert.animate({ height: $alert.css('line-height') || '50px' }, 200).click(function() {
window.clearTimeout(alerttimer);
$alert.animate({ height: '0' }, 200);
});
}
}
</script>
<body onload="load();">
Mais il ne semble pas fonctionner... Toute suggestion..
source d'informationauteur bala3569
Vous devez vous connecter pour publier un commentaire.
Ici un exemple de travail:
En supposant que votre code-behind est en cours d'exécution pendant un UpdatePanel d'actualisation, pourrait-il y avoir une mauvaise interaction entre votre EndRequest de gestionnaire et votre code-behind de l'enregistrement? topBar() doit être appelé deux fois, une fois avec votre "Inséré" message, puis une fois avec un paramètre non défini dans EndRequest (à moins que le message variable est définie quelque part, on ne voit pas ici).
Également garder à l'esprit que
$('#alert')
peut retourner plus d'un élément. Si topBar() est appelée plus d'une fois, c'est probablement le cas.Comment faire quelque chose comme ça, pour commencer, pour atténuer l'effet secondaire involontaire:
Qui ne résout pas le problème de EndRequest et Registre*Script à la fois de l'exécution topBar(), mais qui devrait les empêcher de conflit de sorte que vous pouvez voir ce qu'il se passe mieux.
Donner un essai et laissez-nous savoir si cela change les choses.
Avec Chrome et Firefox, le seul problème que j'ai eu a été la
var alert
être le même nom que lealert()
appel.Il est possible que votre
body
balise n'est pas chargée au moment de l'exécution du script, ce qui signifie que la$(document.body)
de référence serait vide - jquery qui serait en silence ne parviennent pas à ajouter de l'alerte div. De toute façon, il ne blesse jamais pour envelopper vos appels dans un$(document).ready
événement:Cela ne veut pas répondre directement à votre question, mais elle est plus destinée à passer sur une autre technique d'appeler des méthodes de page sans l'aide de la mise à jour des panneaux, mais directement à partir de jQuery.
Simplement décorer votre page (ou la méthode dans la classe partielle du code-behind) comme (il doit être statique):
Ensuite, vous pouvez appeler cette page droit de la méthode de jQuery $.ajax méthode:
C'est très simple, et beaucoup plus propre que d'essayer d'enregistrer des scripts. Pas besoin de créer un service web.
C'est un excellent article:
http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/