控制页可以被嵌套使用,即在一个控制页中可以对其他的控制页进行引用。嵌套的控制页允许你创建结构化的控制页。例如,某个大型网站中可能包含有一个定义网站外观的全局控制页。然后针对不同的网站栏目内容而定义不同的子控制页,并对全局网站控制页进行引用,从而对网站栏目的内容进行外观定义。
与任何一个控制页一样,子控制页文件的扩展名也是 .master。子控制页通常包含有映射到内容占位器的内容控件。在这种关系之下,子控制页能够像任何一个内容页一样被展示。但是,子控制页同样拥有自己的内容占位器,并为子页面提供内容显示。下例所示的三个页面说明了被嵌套的控制页之间的关系。
下例代码是父控制页文件:
<% @ Master Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <body> <form id="Form1" runat="server"> <div> <h1>父控制页</h1> <p> <font color="red">这是父控制页的内容。</font> </P> <asp:ContentPlaceHolder ID="MainContent" runat="server" /> </div> </form> </body> </html>
下例代码是子控制页文件:
<%@ Master Language="C#" master="Parent.master"%> <asp:Content id="Content1" ContentPlaceholderID="MainContent" runat="server"> <asp:panel runat="server" id="panelMain" backcolor="lightyellow"> <h2>子控制页</h2> <asp:panel runat="server" id="panel1" backcolor="lightblue"> <p>这是子控制页的内容。</p> <asp:ContentPlaceHolder ID="Content1" runat="server" /> </asp:panel> <asp:panel runat="server" id="panel2" backcolor="pink"> <p>这是子控制页的内容。</p> <asp:ContentPlaceHolder ID="Content2" runat="server" /> </asp:panel> </asp:panel> </asp:Content>
下例代码是引用子控制页的内容页文件:
<%@ Page Language="C#" master="Child.Master"%> <asp:Content id="Content1" ContentPlaceholderID="Content1" runat="server"> <asp:Label runat="server" id="Label1" text="子标签 1" font-bold="true" /> <br> </asp:Content> <asp:Content id="Content2" ContentPlaceholderID="Content2" runat=server> <asp:Label runat="server" id="Label2" text="子标签 2" font-bold=true/> </asp:Content>