我想要做的就是从内容页面的代码隐藏中访问<body>
元素并为其添加类名。
我有一个顶级母版页,其中包含<body>
元素。然后我有一个嵌套的母版页,它是内容页面的母版页。从内容页面后面的代码我想要一个类名称添加到body元素。就是这样。
我在顶级大师中有这个:
<body id="bodyNode" runat="server">
我将此添加到内容页面的代码隐藏中:
Master.bodyNode.Attributes.add("class", "home-page");
我收到一条消息:
System.Web.UI.MasterPage'不包含'bodyNode
的定义
如果我将其添加到aspx内容页面:
<% @ MasterType VirtualPath="~/MasterPage.master"%>
然后消息变为:
由于其保护级别,bodyNode无法访问
请注意,我浪费了2个小时的感觉,这应该是非常简单的事情:(
答案 0 :(得分:11)
为您的身体节点设置runat =“server”后,您必须使用HTMLControls命名空间访问它。试试这个。
public void Page_Load(Object sender, EventArgs e)
{
//Inject onload and unload
HtmlGenericControl body = (HtmlGenericControl)Master.FindControl("bodyNode");
body.Attributes.Add("class", "home-page");
}
修改强>
您的问题是您有嵌套的母版页。
由于“body”标记位于顶级母版页中,Master.FindControl()
将无法正常工作,因为它正在查看嵌套母版页。
您需要做的是使用Master.Master.FindControl()
,或者递归遍历您的母版页,直到Master.Master
为空(因为您知道自己位于顶级母版页)然后在那上面调用FindControl()
。
答案 1 :(得分:0)
我会在母版页后面的代码中添加一个公共属性,以允许访问作为母版页一部分的body标记。然后从内容页面调用该属性。