Master Page 解决方案,就像在 ASP.NET 2 中一样!






2.88/5 (15投票s)
2005 年 2 月 13 日
2分钟阅读

97537

697
如何添加母版页编程支持?
引言
在本文中,我们可以看到一个关于母版页编码的简单解决方案。在未来,更新到框架 2 将会很简单,因为该解决方案与新框架的设计非常相似。
使用代码
母版页要工作,我们需要做的就是
- 从母版页派生我们的页面。
- 将所有页面包含在一个名为“
content
”的标签中。 - 将表单名称保留为“
Form1
”,因为它默认是这样。 - 使用用户控件作为母版,并在其 HTML 代码中包含一个名为“
ContentPlaceHolder
”的 asp:placeholder。
它是如何工作的?
母版用户控件有一个控件树,其中一个控件是名为“ContentPlaceHolder
”的占位符。另一方面,页面本身也有一个控件树,其中一个控件是“content
”(实际上它有一个在列表下的树:Form1->content
)。
流程是
- 获取内容,并将其移动到母版用户控件中的占位符下。
- 获取整个母版用户控件,并将其移动到 Form 下。
就这些了。
代码
母版页代码
public class MasterPage : System.Web.UI.Page
{
public MasterPage() : base()
{
this.Init +=new EventHandler(MasterPage_PreInit);
}
private void MasterPage_PreInit(object sender, EventArgs e)
{
//LOAD TEMPLATE
//Replace path with aplication parameter!
UserControl template =
(UserControl)LoadControl("~/MasterTemplate.ascx");
//LOAD CONTENT
Control content = this.FindControl("content");
//ADD CONTENT TO TEMPLATE
template.FindControl("ContentPlaceHolder").Controls.Add(content);
//ADD TEMPLATE TO PAGE
this.FindControl("Form1").Controls.Add(template);
}
}
这是一个母版用户控件。我们唯一需要做的是包含名为 ContentPlaceHolder
的占位符。
<%@Control Codebehind="MasterTemplate.ascx.cs"
Inherits= "MasterPage.MasterTemplate" ... %>
<TABLE id="Table1" runat="server">
<tr>
<TD height="22" align="center">This Is The Header</TD>
</tr>
<TR>
<TD vAlign="top" align="right">
<tableid="table2" runat="server">
<tr>
<td>
<asp:placeholder id="ContentPlaceHolder"
runat="server"></asp:placeholder>
</td>
</tr>
<tr height= "10>
<td><asp:labelid="LabelError"
Runat= "server">Fatal error...</asp:label>
</td>
</tr>
</table>
</TD>
</TR>
<tr height="10">
<td align="center">This Is The Bottom</td>
</tr>
</TABLE>
这是页面。在 BODY
中呈现的所有代码都必须包含在一个名为 content
的标签中。
<%@ Page ... %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<body>
<form id="Form1" method="post" runat="server">
<asp:panel id="content" runat="server" HorizontalAlign="Center">
<asp:Calendar id="Calendar1" runat="server" ... ></asp:Calendar>
</asp:panel>
</form>
</body>
</HTML>
这是页面代码隐藏。我们唯一需要做的是从基页 MasterPage
派生它。
public class WebForm1 : MasterPage
{
...
}
移动到 ASP.NET 2
要将我们的代码更改为在新框架下运行,我们需要
- 移除对方法
MasterPage_PreInit
的调用。 - call
Page.MasterPagePage.MasterPageFile = "~/MasterPage.master";
或在页面指令中添加
<%@ Page MasterPageFile="~/MasterPage.master" ... %>
ASP.NET 2 中母版页的新视图

关于母版页的其他文章
- 如何在 ASP.NET (.NET Framework 1.x) 中开发级联母版页,而无需使用自定义控件
- 母版页的重新定义 - 一种基于组件的 ASP.NET 模板引擎
- 一个使用面向模式设计的可扩展 ASP.NET 1.1 母版页框架
- 用于多页面模板网站的 RJContentPanel WebControl
历史
本文中的代码基于来自 Microsoft 的 演示文稿,作者是Alik Levin。