2016-08-10 1 views
2

Je possède ce code:Comment ajouter correctement un script à un contrôle?

Dim script = New HtmlGenericControl("script") 
script.Attributes.Add("type", "text/javascript") 
script.InnerText = "var alohaInterval = setInterval(function() {if (typeof Aloha === ""undefined"") {return;} clearInterval(alohaInterval); Aloha.ready(function() {Aloha.jQuery("".editable-content"").aloha();})}, 100);" 
htmlControl.Controls.Add(script) 

Cela génère la chose suivante:

<script type="text/javascript">var alohaInterval = setInterval(function() {if (typeof Aloha === &quot;undefined&quot;) {return;} clearInterval(alohaInterval); Aloha.ready(function() {Aloha.jQuery(&quot;.editable-content&quot;).aloha();})}, 100);</script> 

Le problème est qu'il est HTML codé. Ma question est: comment s'assurer que le script ne sera pas encodé en HTML?

+1

Utilisez RegisterClientScriptBlock. https://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerclientscriptblock(v=vs.110).aspx – Bert

+0

Je vais bientôt tester cela. Pouvez-vous expliquer pourquoi le résultat du code affiché dans la question est codé en HTML? InnerText encode le texte. –

+0

InnerHtml devrait lui permettre de passer à travers non codé. – Bert

Répondre

1

Il existe plusieurs façons de procéder selon ce dont vous avez besoin.

Pour une petite quantité de script que vous voulez toujours disponible pour votre contrôle, que vous intégrez le plus souvent dans le code sous la forme d'une chaîne, vous voudrez utiliser RegisterClientScriptBlock ou RegisterStartupScript. Celui que vous choisissez dépend principalement de l'endroit où vous voulez que le script soit rendu. Vous pouvez trouver une bonne explication pour quand choisir l'un ou l'autre here. Une autre option que vous pouvez choisir est RegisterClientScriptResource. Je trouve cette option plus utile lorsque j'écris un contrôle serveur qui a une quantité importante de JavaScript ou que je veux inclure en tant que partie d'une bibliothèque de classes. Cette option vous permet de compiler le script dans la bibliothèque en tant que ressource incorporée, puis d'inclure la bibliothèque dans d'autres projets. L'expérience d'édition est bien meilleure quand j'ai plus que quelques lignes de JavaScript.

Pour ce cas particulier:

ClientScript.RegisterClientScriptBlock(Me.GetType, "alohainit", "var alohaInterval = setInterval(function() {if (typeof Aloha === ""undefined"") {return;} clearInterval(alohaInterval); Aloha.ready(function() {Aloha.jQuery("".editable-content"").aloha();})}, 100);", True)