【问题标题】:Using sections in ASP.NET Webforms在 ASP.NET Webforms 中使用部分
【发布时间】:2013-10-04 23:15:39
【问题描述】:

我遇到了一个引导问题,希望你们中的某个人能找到解决方案。

我已将所有 JavaScript 引用放在我的母版页底部。这通常可以正常工作,但现在我有一个 ASCX 控件,它需要在页脚(模块的初始化)中添加一些 JavaScript。我无法从母版页初始化模块的原因是因为我需要代码隐藏文件中的一些属性。

在 ASP.NET MVC 中,我会使用部分将数据从用户控件注入到母版页中的部分,但这在 ASP.NET Webforms 4 中是否可行?

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    您可以在母版页底部添加如下内容:

    <asp:PlaceHolder runat="server" ID="javascriptSection" />
    

    然后在你页面的代码后面或者&lt;% %&gt;标签中:

    var scriptTag = new HtmlGenericControl("script");
    
    scriptTag.Attributes["type"] = "text/javascript";
    
    scriptTag.InnerHtml = @"function () { ... }";
    
    var javascriptSection = this.Page.Master.FindControl("javascriptSection");
    
    if (javascriptSection != null)
        javascriptSection.Controls.Add(scriptTag);
    

    【讨论】:

      【解决方案2】:

      不,WebForms 中没有节的概念。

      您所描述的一种方法是使用&lt;%= %&gt; 语法并将服务器属性的值发送到客户端(HTML 输出)。在您的 ASCX 控件中,您可以使用以下标记:

      <script type="text/javascript">
      var clientProperty = <%= MyServerProperty %>; 
      </script>
      

      ASP.NET WebForms 将在呈现页面时替换上面的 MyServerProperty 的值,然后您可以从母版页中的脚本访问 clientProperty 作为全局变量。

      另一种方法是使用Hidden field 并在服务器上设置其值。它将呈现为&lt;input type="hidden"&gt;,然后您可以通过 ID 从任何脚本中获取其值。

      第三种选择是仅从 ASCX 控件加载实际的客户端脚本(当它有意义时),而不是将其放在母版页中(当它将在站点的任何地方加载时)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        相关资源
        最近更新 更多