正在服务器端初始化JavaScript变量

Initializing JavaScript Variables on Server Side

本文关键字:JavaScript 变量 初始化 服务器端      更新时间:2023-09-26

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

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

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

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

我也试过:

var z='<%=Request.QueryString["Env"]%>';

在我运行该代码后,我得到了以下错误,所以我认为这是不正确的:

无法修改Controls集合,因为控件包含代码块(即<%…%>)。

在过去的几年里,我主要从事MVC开发,所以我不确定自己做错了什么。

请告诉我。

感谢

我认为在关闭body标记而不是head标记之前放置javascript是个好主意。然后您可以使用<%=语法。

您提到的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-

为了确保<%# %>是用于迭代的,为了渲染字符串,您需要使用<%= %>,因为它可能在服务器上运行的头上,最好避免这种情况,并使用类似的文字。

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

后面的代码

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

我很想使用

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

这应该写在您需要的带有脚本标记的脚本块中(最终参数设置为true)。

它是从服务器端调用的,所以只需将其弹出到Page_Load中即可。它的好处是在出现问题时更容易调试。

我很想用一个临时运算符I,例如对查询字符串进行null检查

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

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