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

时间:2011-08-15 09:46:17

标签: .net asp.net user-controls master-pages

我有一个用户控件,我想在主页的头部“注入”某些东西。我试图使用以下方法(母版页和用户控制mmarkup片段)...

母版

<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 个答案:

答案 0 :(得分:4)

你不能。

默认情况下,数据设计为从主页面流向用户页面,反之亦然。

有关详细信息,请参阅Working with ASP.NET Master Pages ProgrammaticallyHow Master Pages Work

答案 1 :(得分:3)

您可以通过母版页的公共方法访问母版页内容。因此,如果我从您的问题中提取示例,您可以通过以下代码修改从用户控件或页面设置母版页中链接的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";