2010-09-01 57 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

相關問題