65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.88/5 (15投票s)

2005 年 2 月 13 日

2分钟阅读

viewsIcon

97537

downloadIcon

697

如何添加母版页编程支持?

Sample Image - MasterPage.jpg

引言

在本文中,我们可以看到一个关于母版页编码的简单解决方案。在未来,更新到框架 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 中母版页的新视图

Look in ASP 2

关于母版页的其他文章

历史

本文中的代码基于来自 Microsoft 的 演示文稿,作者是Alik Levin

访问 Yitzhak Gootvilig 的博客

© . All rights reserved.