我有一个用户控件,我想在主页的头部“注入”某些东西。我试图使用以下方法(母版页和用户控制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>
但是这给出了错误:
内容控件必须是内容页面中的顶级控件或 引用母版页的嵌套母版页。
那么如何在运行时从控件中将内容放入母版页?
答案 0 :(得分:4)
你不能。
默认情况下,数据设计为从主页面流向用户页面,反之亦然。
有关详细信息,请参阅Working with ASP.NET Master Pages Programmatically和How 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";