在使用母版页时向 <body> 标签添加属性






4.66/5 (27投票s)
2007 年 6 月 28 日
2分钟阅读

221703
从 ASP.NET 内容页访问母版页 <body> 标签
问题
如果您在 ASP.NET 应用程序中使用母版页,并且需要从内容页向 <BODY>
标签添加属性——例如,为了设置页面 onload
事件的客户端脚本函数——您会发现无法直接这样做,因为 <BODY>
标签位于母版页中,而不是您的内容页中。
解决方案
将母版页上的 <BODY>
标签设为 public
属性,以便您可以从任何内容页访问它。首先,将母版页中的 <BODY>
标签提升为 ASP.NET 服务器控件。更改
<BODY>
to
<BODY id="MasterPageBodyTag" runat="server">
现在 body 标签是一个服务器控件,您可以在母版页的代码隐藏文件中将其配置为公共属性
using System.Web.UI.HtmlControls;
public partial class MyMasterPage : System.Web.UI.MasterPage
{
public HtmlGenericControl BodyTag
{
get
{
return MasterPageBodyTag;
}
set
{
MasterPageBodyTag = value;
}
}
...
请注意,MasterPageBodyTag
服务器控件的类型为 System.Web.UI.HtmlControls.HtmlGenericControl
。为了演示这一点,只需在代码隐藏文件中的 Page_Load
函数中设置一个断点,以调试模式运行 ASP.NET 项目到该点,然后在“立即窗口”中执行 ?MasterPageBodyTag.GetType().ToString()
。要在内容页中使用此属性,首先在内容页的 ASPX 文件中声明母版页的类型
<%@ MasterType TypeName="MyMasterPage" %>
然后在内容页的代码隐藏文件中,使用母版页的 BodyTag
属性向 <BODY>
标签添加属性
protected void Page_Load(object sender, EventArgs e)
{
Master.BodyTag.Attributes.Add("onload", "SayHello()");
...
当然,此示例假定此内容页中存在一个 SayHello()
客户端脚本。运行应用程序到内容页,然后在浏览器中查看源代码,将显示 onload="SayHello()"
属性已添加到 <BODY>
标签。此技术适用于您希望从内容页访问母版页中的任何 HTML 标签。
历史
- 2007 年 6 月 28 日 -- 发布原始版本
- 2007 年 6 月 30 日 -- 文章移动到 CodeProject.com 的主要文章数据库
- 2007 年 7 月 30 日 -- 文章已编辑