我遇到了一个引导问题,希望你们中的一个人能找到解决方案。
我已将所有 JavaScript 引用放在我的母版页底部。这通常工作正常,但现在我有一个 ASCX 控件,它需要在页脚(模块的初始化)中添加一些 JavaScript。我无法从母版页初始化模块的原因是因为我需要我的代码隐藏文件中的一些属性。
在 ASP.NET MVC 中,我会使用部分将数据从用户控件注入到母版页中的部分,但这在 ASP.NET Webforms 4 中是否可行?
您可以在母版页底部添加如下内容:
<asp:PlaceHolder runat="server" ID="javascriptSection" />
然后在您页面的代码后面或<% %>
标签中:
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);
不,WebForms 中不提供该部分的概念。
执行您所描述的一种方法是使用<%= %>
语法并将服务器属性的值发送到客户端(HTML 输出)。在您的 ASCX 控件中,您可以使用以下标记:
<script type="text/javascript">
var clientProperty = <%= MyServerProperty %>;
</script>
ASP.NET WebForms 将在呈现页面时替换上面的 MyServerProperty 的值,然后您可以从母版页中的脚本访问 clientProperty 作为全局变量。
另一种方法是使用隐藏字段并在服务器上设置其值。它将呈现为<input type="hidden">
,然后您可以通过 ID 从任何脚本中获取其值。
第三种选择是仅从 ASCX 控件加载实际的客户端脚本(当它有意义时),而不是将其放在母版页中(当它将在站点的任何地方加载时)。