me semble que c'est un peu bizarre que vous pouvez faire ..
Page.ClientScript.RegisterStartupScript(this.GetType(), "KeyName", "alert('changed my mind')", true);
4 Réponses :
Je suppose que vous voudriez "désenregistrer" le script (qui a déjà été enregistré) sous une condition, comme: Pourquoi cela ne peut-il pas simplement être changé en : p>
Vous avez raison au lieu de résoudre le code odeur avec refactoring, je cherchais une solution plus rapide .. méchant!
Si seulement elle était aussi délibérée que de vous protéger de l'appel de l'enregistrement trop tard. C'est en fait sans danger jusqu'à la stade de rendu, mais inscristarstartupscript est assez heureux d'être appelé après le rendu quand il est trop tard pour inclure le script de la réponse.
C'est en fait pire que vous ne le pensez - "simplement en l'enregistrant et que cela ne fait rien" n'est pas une option non plus. La méthode de registre vérifie si un script est déjà enregistré avec cette clé et ne fait rien si c'est. Une fois que vous avez appelé Pourquoi Microsoft a-t-il fait cela, je suppose que la possibilité de modifier ou de supprimer des scripts enregistrés a été simplement oubliée lorsque Lorsque vous enregistrez un script, il est stocké à deux endroits au sein de ClientcriptManager. Un listdictionnaire permet de vérifier si un script est déjà enregistré et une arracheListe stocke les scripts réels tels qu'ils seront rendus. Je suppose que le tableau est utilisé pour garantir que les scripts sont rendus dans l'ordre dans lequel ils ont été enregistrés, mais cela signifie également que vous ne pouvez pas indiquer quelle chaîne dans la flambée appartient à quelle clé. P>
Il ne serait pas difficile d'équiper votre propre classe de page avec des méthodes de enregistrezStartupscript code>, rien que vous puissiez faire pour arrêter ce script étant rendu. P>
enregistrementStartupscript code> a été conçu pour la première fois. Les choix de conception se sont déroulés non triviaux de revenir en arrière et de créer une méthode sans engagement, ils auraient donc besoin d'une bonne raison de le faire. P>
maybeaddstartupscript (touche, script) code> et
modifiMMIndaboutThatStartupscript (touche) code>. Enregistrez les clés et les scripts de votre propre dictionnaire, puis dans le prélendeur, enregistrez-vous quel que soit les scripts l'ont rendu aussi loin. C'est certainement ennuyeux de devoir le faire vous-même, cependant. P>
Le point clé que j'ai pris à partir de cette réponse était d'enregistrer des scripts dans Pre_Render plutôt que de vous inscrire à la page_load, puis de tenter de ré-enregistrer en fonction d'un événement sur la page.
@Brianhinchey Je suis d'accord, et bien que ma réponse ici n'utilise pas le préliminaire, cela aide à comprendre ce qui se passe dans les coulisses. Jetez un coup d'œil et dites-moi si vous aimez ma solution.
Après de nombreuses études, j'ai trouvé une solution au problème si vous souhaitez exécuter uniquement le script enregistré une fois em> basé sur un événement. Spécial grâce à la réponse de @ Stevemegson ici qui m'a aidé à comprendre ce que le problème était réellement. La solution implique le Cela fonctionne comme ceci. Une fonction JavaScript générique qui appelle d'abord la fonction de travailleur, puis se supprime est la première instruction, puis Ceci est basé sur un Solution Telerik . Il fait référence à Telerik Controls, mais toutes les fonctionnalités sont ASP.NET. P> P> sys.application.add_ad_load code> et
retirer_load code> méthodes javascript. p>
add_load code> le suit en appelant cette fonction: p>
Cela fait toujours fonctionner le script sur la post-retour pour moi
@Jameswierzba Sauf si vous mettez cela dans la charge de la page, cela s'exécutera, puis déchargez immédiatement cette méthode. Peut-être que vous pourriez dupliquer votre problème sur un violon?
Comment puis-je Ecraser une fonction JavaScript ajoutée (dynamiquement) par ASP.NET UPDOYPANELL?
Je pense qu'un utilisateur UpdatePanel est une solution pour écraser JS. Lorsque nous utilisons un panneau de mise à jour, un JavaScript n'est pas exécuté sur le dos partiel et doit être enregistré par code: p> si nous ne le faisons pas, nous pouvons alors enregistrer / rendu une fonction modifiée Encore une fois sur le dos partiel dans le panneau de mise à jour. Dans ce cas, il y a un problème de fonction de fonction. P> Désolé pour mon anglais. p> p>
Juste à l'esprit, pourquoi B> voudriez-vous désenregistrer un script?
@Ian: Parce que si vous allez sur une autre page Web et revenez à nouveau à l'aide de l'option Back du navigateur, le script redevient à nouveau!
@Iankemp dans mon cas, c'était parce que je devais lancer une popup, mais seulement après la survenue du post-plan. Consultez ma réponse, tandis que tout ce problème est un kludge, c'était de loin le moins kludgy.