通过嵌套母版页从内容页面访问body元素

dan*_*man 5 asp.net

我想要做的就是<body>从内容页面的代码隐藏中访问元素并为其添加类名.

我有一个包含<body>元素的顶级母版页.然后我有一个嵌套的母版页,它是内容页面的母版页.从内容页面后面的代码我想要一个类名称添加到body元素.就这样.

我在顶级大师中有这个:

<body id="bodyNode" runat="server">
Run Code Online (Sandbox Code Playgroud)

我将此添加到内容页面的代码隐藏中:

Master.bodyNode.Attributes.add("class", "home-page");
Run Code Online (Sandbox Code Playgroud)

我收到一条消息:

System.Web.UI.MasterPage'不包含'bodyNode的定义

如果我将其添加到aspx内容页面:

<% @ MasterType VirtualPath="~/MasterPage.master"%>
Run Code Online (Sandbox Code Playgroud)

该消息然后更改为:

由于其保护级别,bodyNode无法访问

请注意,我已经浪费了2个小时的感觉,这应该是非常简单的事情:(

Gre*_*ead 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");   
}
Run Code Online (Sandbox Code Playgroud)

编辑
你的问题是你有嵌套的母版页.

由于"body"标记位于顶级母版页中,Master.FindControl()因此无法使用,因为它在嵌套母版页中查找.

你需要做的是使用Master.Master.FindControl()或递归遍历你的母版页,直到Master.Master为空(因为你知道你在顶级母版页),然后调用FindControl()它.