2016-08-10 5 views
2

Ich habe diesen Code:Wie füge ich ein Skript korrekt zu einem Steuerelement hinzu?

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) 

Dies erzeugt die folgenden:

<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> 

Das Problem ist, dass es HTML-codiert ist. Meine Frage ist: Wie stelle ich sicher, dass das Skript nicht HTML-codiert ist?

+1

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

+0

Ich werde das bald testen. Kannst du erklären, warum das Ergebnis des in der Frage gezeigten Codes HTML-codiert ist? –

+0

InnerText codiert den Text. InnerHtml sollte es ermöglichen, nicht codierte Daten zu übertragen. – Bert

Antwort

1

Je nachdem, was Sie benötigen, gibt es verschiedene Möglichkeiten.

Für eine kleine Menge von Skripten, die Sie immer für Ihr Steuerelement verfügbar haben möchten, die Sie am häufigsten in den Code als Zeichenfolge einbetten, sollten Sie RegisterClientScriptBlock oder RegisterStartupScript verwenden. Welche Sie wählen, hängt hauptsächlich davon ab, wo das Skript gerendert werden soll. Sie können eine gute Erklärung dafür finden, wann Sie das eine oder andere here auswählen können.

Eine andere Option, die Sie wählen können, ist RegisterClientScriptResource. Ich finde diese Option am nützlichsten, wenn ich ein Server-Steuerelement schreibe, das eine beträchtliche Menge an JavaScript enthält oder das ich als Teil einer Klassenbibliothek einbeziehen möchte. Mit dieser Option können Sie das Skript als eingebettete Ressource in die Bibliothek kompilieren und dann die Bibliothek in andere Projekte einbinden. Die Bearbeitungserfahrung ist einfach viel besser, wenn ich mehr als nur ein paar Zeilen JavaScript habe.

Für diesen speziellen Fall:

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) 
Verwandte Themen