如何正确添加脚本到控件?

时间:2016-08-10 18:33:18

标签: javascript asp.net vb.net asp.net-controls

我有这段代码:

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)

这会产生以下结果:

<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编码的。我的问题是:如何确保脚本不会被HTML编码?

1 个答案:

答案 0 :(得分:1)

根据您的需要,有几种方法可以解决这个问题。

对于您始终希望可用于控件的少量脚本,您最常将其作为字符串嵌入代码中,您将需要使用RegisterClientScriptBlockRegisterStartupScript。您选择哪一个主要取决于您希望渲染脚本的位置。您可以找到何时选择其中一个here的好解释。

您可能想要选择的另一个选项是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)