如何从用户控件引用母版页内容控件?

4

我在一个用户控件中,想要向母版页的头部“注入”一些内容。我尝试使用以下方法(母版页和用户控件标记示例)...

母版页:

<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>

用户控件:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <link type="text/css" rel="stylesheet" href="/Shared/Css/Navigation.css" />
</asp:Content>

但这会导致错误:
内容控件必须是内容页或嵌套引用母版页的母版页中的顶级控件。
那么,我该如何在运行时从控件将内容放入母版页中呢?
2个回答

5

4
您可以通过主控页面的公共方法来访问主控页面的内容。所以,如果我采用你问题中的例子,在您的用户控件或页面中进行以下代码修改,您可以在主控页面中设置链接的href:
将链接在主控页面中引入为“普通内容”,并为其提供 id,以便您可以从后台代码中访问它。
<link id="link" type="text/css" rel="stylesheet" />

在母版页上添加一个属性,设置href。

public string LinksHref
{
     get { return link.Href; }
     set { link.Href = value; }
}

如果您想从页面访问此内容,可以添加MasterType指令。

<%@ MasterType VirtualPath="~/Site.Master" %>

在控件的代码后台更改属性。

Master.LinksHref = "/Shared/Css/Navigation.css";

如果你想从用户控件中访问此内容,则不能使用MasterType指令,需要自己进行强制转换:
((MasterPageClassName)Page.master).LinksHref= "/Shared/Css/Navigation.css";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接