在服务器端初始化JavaScript变量

时间:2012-01-28 14:00:23

标签: javascript asp.net

我在使用母版页在ASP.Net Web窗体(非MVC)的服务器端设置JavaScript变量时遇到问题。

基本上我想做这样的事情:

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

运行代码后,我看到:var z ='';

我也尝试过:

var z =&#39;&lt;%= Request.QueryString [&#34; Env&#34;]%&gt;&#39;;

运行该代码后,我收到以下错误,因此我认为这是不正确的:

无法修改Controls集合,因为该控件包含代码块(即&lt;%...%&gt;)。

过去几年我一直主要做MVC开发,所以我不确定我做错了什么。

请告诉我。

由于

4 个答案:

答案 0 :(得分:3)

我认为在关闭body标签而不是head标签之前放置javascript是个好主意。然后你可以使用&lt;%= syntax。

答案 1 :(得分: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-

答案 2 :(得分:0)

我很想使用

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

这应该使用脚本标记(最终参数设置为true)在脚本块中写入。

从服务器端调用它,只需将其弹出Page_Load即可。如果出现问题,它可以更容易调试。

我很想对查询字符串进行空检查以及使用tenary运算符i,e,

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

只是使空检查更加透明,并且可能为默认情况提供机会。

答案 3 :(得分: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"]);
相关问题