Asp.Net - UserControl - 从MasterPage继承

时间:2010-06-15 00:24:44

标签: c# user-controls asp.net-3.5 master-pages

用户控件(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

2 个答案:

答案 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");

这可能会指出你正确的方向 - 我仍然不完全确定你要做什么。