2012-01-28 21 views
1

我在使用母版頁在ASP.Net Web窗體(而不是MVC)中設置服務器端JavaScript變量時出現問題。在服務器端初始化JavaScript變量

基本上我想要做這樣的事情:

<script type="text/javascript"> 
    var z = '<%# Request.QueryString["Env"] %>'; 
</script> 

後,我運行代碼,我看到的:var Z =」」;

我也嘗試:

變種Z = '<%=的Request.QueryString [ 「的Env」]%>';

後,我運行代碼,我碰到下面的錯誤,所以我認爲是不正確的:

Controls集合不能修改,因爲該控件包含代碼塊(即<%...%>)。

我過去幾年一直在做主要的MVC開發,所以我不確定我做錯了什麼。

請讓我知道。

謝謝

+0

我已經離開了WebForms一段時間了,但你的第二個片段看起來像我記得的。你可以多發一些周圍的代碼嗎? – 2012-01-28 14:09:18

+0

動態JavaScript是一種已知的反模式。不要這樣做。 – Raynos 2012-01-28 14:34:10

+0

@Raynos:我想你不會做很多MVC開發,因爲它被用在各地。 – Richard 2012-01-29 20:04:15

回答

3

我認爲這是將JavaScript的一個好主意,只是收盤前身體標記,而不是頭標籤。那麼你可以使用<%=語法。

+0

感謝您的回覆。我用這個選項,它工作。謝謝。 – Richard 2012-01-30 16:12:02

1

你提到的JavaScript塊的任何機會是在服務器控件內?

例如:

<head runat="server"> 
    <script type="text/javascript"> 
    var z = '<%# Request.QueryString["Env"] %>'; 
    </script> 
<head> 

如果是這樣嘗試將其更改爲:

<head runat="server"> 
    <div runat="server"> 
     <script type="text/javascript"> 
     var z = '<%= Request.QueryString["Env"] %>'; 
     </script> 
    </div> 
<head> 

參考:http://www.west-wind.com/weblog/posts/2006/May/27/The-Controls-collection-cannot-be-modified-because-the-control-contains-code-blocks-ie-

+0

感謝@Aristos,編輯 – 2012-01-28 14:33:54

0

我會嘗試使用

ClientScript.RegisterClientScriptBlock(GetType(), "scriptBlockKey", 
     "var z = '" + Request.QueryString["Env"] + "';", true); 

那守ld用腳本標記(最終參數設置爲true)在腳本塊中寫入。

它從服務器端調用,所以只需在Page_Load中彈出即可。它具有更容易調試的好處,因爲事情出錯了。

我將與ten​​ary運營商I,E被誘惑到查詢字符串空校驗和,

string env = Request.QueryString["Env"] == null ? string.Empty : 
            Request.QueryString["Env"].ToString(); 
    ClientScript.RegisterClientScriptBlock(GetType(), "scriptBlockKey", 
      "var z = '" + env + "';", true); 

只是使空查了一下更加透明,也許給出了一個機會默認情況下。

+0

感謝您的迴應。我用這個選項,它工作。然而,我決定採用不同的答案來解決我的問題,因爲它的變化不大。再次感謝。 – Richard 2012-01-30 16:13:24

0

肯定<%# %>是用於迭代的,爲了呈現一個字符串,你需要使用<%= %>因爲可能在服務器上運行的頭文件最好避免這種情況,並使用像這樣的文字。

<script type="text/javascript"> 
    <asp:literal run="server" id="txtJavaDeclarations" EnableViewState="false" /> 
</script> 

在後面的代碼

txtJavaDeclarations.Text 
     = string.Format("var z = '{0}' ;\n", Request.QueryString["Env"]);