2010-04-12 4 views
0

J'utilise le code suivant pour tenter de montrer une boîte de dialogue avec une liste d'erreurs sur le client:code RegisterClientScriptBlock ne pas exécuter

if (rollout.ImportErrors.Count > 0) 
    { 
     ClientScript.RegisterClientScriptBlock(GetType(), "showErrors", "showErrors();", true); 
    } 

Le nombre d'erreurs est non nul et le bloc de script suivant est émis, mais le script ne s'exécute pas.

<script type="text/javascript"> 
//<![CDATA[ 
$("#error-report").dialog("open")//]]> 
</script> 

Si je l'appelle directement la fonction d'une fenêtre de la console Firebug, la boîte de dialogue montre bien, donc je sais le dialogue et mon code fonctionnent. Qu'est-ce que je fais mal? Par ailleurs, ce code se trouve dans une page de contenu, en utilisant un espace réservé de contenu qui «injecte» du code dans l'élément de la page rendue.

Répondre

3

Je pense que vous devriez essayer RegisterStartupScriptBlock au lieu de RegisterClientScriptBlock ...

Découvrez l'explication:

RegisterClientScriptBlock insère le script suivant immédiatement la balise de début alors que RegisterStartupScript ajoute le script immédiatement avant la balise de fin.

Dans IE, le DOM HTML est créé en série. Ainsi vos informations d'en-tête seront traitées d'abord votre objet formulaire sera créé, votre RegisterClientScript sera analysé (et exécuté si pas dans les blocs fonction) vos contrôles tels que les zones de texte etc dans votre formulaire seront créés, alors votre RegisterStartupScript sera analysé (et exécuté sinon dans les blocs fonctionnels). Donc, dans IE au moins, vous avez la garantie que tous les éléments de formulaire existeront pour que vos scripts puissent y accéder si vous mettez le code dans le RegisterStartupScript. Inversement, vous avez la garantie que les éléments de formulaire n'existeront pas pour vos scripts dans le bloc RegisterClientScript et que le code n'est pas dans les blocs fonctionnels.

+0

Notez que ceci est RegisterStartupScript; pas S'enregistrerStartupScriptBlock –

0

Vous devez envelopper dans ce cas, comme celui-ci:

$(function() { $("#error-report").dialog("open"); }); 

Il est juste de le placer dans la page, mais le DOM peut toujours pas être prêt (il est lorsque vous exécutez dans la console, c'est pourquoi ça marche là-bas). Comme si vous écriviez un script directement dans la page, enveloppez-le afin qu'il ne s'exécute pas avant document.ready.

Questions connexes