2010-09-01 56 views
2

我需要添加一个JavaScript包含到我的ASP.NET页面。 javascript文件的url在查询字符串中有两个键/值对。但是,&符号正在逃脱,我不希望那样。如何在使用RegisterClientScriptInclude时保留URL的查询字符串中的&符号?

Page.ClientScript.RegisterClientScriptInclude("myKey", 
    "https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&s=1") 

这将导致以下HTML:

<script 
    src="https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&amp;s=1" 
    type="text/javascript"></script> 

但我真正想要的是:

<script 
    src="https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&s=1" 
    type="text/javascript"></script> 

帮助?

回答

0

我在过去遇到过这种情况,从来没有找到解决办法。我需要创建URL服务器端,我不喜欢将内联代码放在我的aspx页面中,所以我最终使用了一个Literal控件并构建了脚本标记并对其进行分配。

对于示例:

<form id="form1" runat="server"> 
    <asp:Literal ID="ltScriptInclude" runat="server"></asp:Literal> 

然后在Page_Load

string url = "https://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&s=1"; 
ltScriptInclude.Text = string.Format(
    "<script src=\"{0}\" type=\"text/javascript\"></script>", 
    url); 

一个完整的娱乐将也被包裹在一个if像分配做了注册键的检查:

if (IsStartupScriptRegistered("myKey")) 
{ 
    // assign 
    // set the key 
} 

但这可能不需要因为它没有被分配到任何其他地方,所以改变PostBack双重分配它。

这不是最干净的解决方案,如果RegisterClientScriptInclude有某种类型的参数来告诉它不进行编码,它会很好。不幸的是,我不认为有任何解决办法,上面的内容也不错。大多数包含脚本文件通常没有&,所以绝大多数人都不会遇到这个问题。

+0

我大量使用用户控件来显示仪表板,所以它必须具备IsStartupScriptRegistered(字符串)功能以避免脚本重复,您对此有何建议? – Llyle 2010-09-02 21:48:58

2

实际上,编码的&符号是有效的HTML标记。你的目标是试图产生无效的标记。未编码的&符号无效。

+0

感谢您指出Mike,因为属性中的非转义&符解释为实体引用的开始,如http://www.w3.org/TR/html4/charset.html#h-5.3中所述。 2 – Llyle 2013-06-18 04:14:26

相关问题