用户控件(ascx)是否可以通过MasterPage执行类似herit的操作?
我的观点是,在我的一个用户控件中(仅使用一种MasterPage),我想使用<asp:content>
标签,但我不能,我只能在使用的页面中使用那个用户控制......
因此,我必须在使用该用户控件的每个页面中重复一些代码...
例如,每次我需要添加类似的东西:
<asp:Content ID="cntJavascript" ContentPlaceHolderID="cphJavascript" runat="server">
<script type="text/javascript" src="<%= Url.Content("~/Content/js/UcJs.js") %>"></script>
</asp:Content>
那是因为,我希望我的所有Js文件都在我的MasterPage中的同一个地方,而我只想添加所需的Js
答案 0 :(得分:1)
我认为您正在寻找的答案是在每个需要支持Javascript代码的控件中使用Page.RegisterClientScriptInclude
,每次都使用相同的键值。
通过这种方式,无论有多少控件需要,Javascript文件都只包含一次。
internal static void RegisterJavascriptInclude(Page page, string includeFile)
{
string key = includeFile.ToLowerInvariant();
if (!page.ClientScript.IsClientScriptIncludeRegistered(key))
page.ClientScript.RegisterClientScriptInclude(key, page.ResolveClientUrl(includeFile));
}
答案 1 :(得分:0)
我假设您的用户控制输出每个用户控件不同的javascript url。我可以通过几种方式来做到这一点。
在您的母版页中添加一个方法,如:
void AddJavascriptFile(string url) {
this.ContentPlaceHolder1.Controls.Add(
new LiteralControl(
"<script type='text/javascript' src='" + url + "'></script>"));
}
...然后在您的用户控件中,您可以像这样添加您的javascript:
((MyMasterPage)((System.Web.UI.Page)this.Parent).Master).AddJavascriptFile(
"http://example.com/javascript.js");
这可能会指出你正确的方向 - 我仍然不完全确定你要做什么。