2016-08-10 6 views
2

私はこのコードを持っている:スクリプトをコントロールに正しく追加するにはどうすればよいですか?

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

問題は、それがHTMLエンコードされていることである:

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) 

これは、次のものを生成します。私の質問は、スクリプトがHTMLでエンコードされないようにする方法です。

+1

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

+0

私はすぐにそれをテストします。あなたはHTMLコード化された質問に示されたコードの結果がなぜなのか説明できますか? –

+0

InnerTextはテキストをエンコードします。 InnerHtmlは、エンコードされていないものを通過させる必要があります。 – Bert

答えて

1

あなたが必要なものに応じてこれを実行する方法はいくつかあります。

コントロールのために常に利用できる少量のスクリプトの場合、コードに文字列として埋め込むのが最も一般的です。RegisterClientScriptBlockまたはRegisterStartupScriptを使用します。どちらを選択するかは、主にスクリプトをレンダリングする場所に依存します。あなたはどちらかを選択するときの良い説明を見つけることができますhere

もう1つの選択肢はRegisterClientScriptResourceです。私はこのオプションがJavaScriptのかなりの量を持っているサーバーコントロールを書いているとき、またはクラスライブラリの一部としてインクルードしたいときに最も便利だと思っています。このオプションを使用すると、スクリプトを埋め込みリソースとしてライブラリにコンパイルし、そのライブラリを他のプロジェクトに含めることができます。編集の経験は、ほんの数行以上のJavaScriptを持っていると、はるかに優れています。この特定のケースでは

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) 
関連する問題