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

时间:2010-05-19 14:06:46

标签: asp.net

我想要做的就是从内容页面的代码隐藏中访问<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个小时的感觉,这应该是非常简单的事情:(

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标记。然后从内容页面调用该属性。