Master pages can be nested, with one master page referencing another as its master. Nested master pages allow you to create componentized master pages. For example, a large site might contain an overall master page that defines the look of the site. Different site content partners can then define their own child master pages that reference the site master and that in turn define the look for that partner's content.
A child master page has the file name extension .master, as with any master page. The child master page typically contains content controls that are mapped to content placeholders on the parent master page. In this respect, the child master page is laid out like any content page. However, the child master page also has content placeholders of its own to display content supplied by its own child pages. The following three page listings show a simple nested master page configuration.
This is the parent master file:
<% @ Master Language="VB" %> <!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> <head runat="server"> <title>Untitled Page</title> </head> <form id="Form1" runat="server"> <div> <h1>Parent Master</h1> <p style="font:color=red">This is parent master content.</p> <asp:ContentPlaceHolder ID="MainContent" runat="server" /> </div> </form> </body> </html>
<% @ 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" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="Form1" runat="server"> <div> <h1>Parent Master</h1> <p style="font:color=red">This is parent master content.</p> <asp:ContentPlaceHolder ID="MainContent" runat="server" /> </div> </form> </body> </html>
This is the child master file:
<%@ Master Language="VB" MasterPageFile="~/Parent.master"%> <asp:Content id="Content1" ContentPlaceholderID="MainContent" runat="server"> <asp:panel runat="server" id="panelMain" backcolor="lightyellow"> <h2>Child master</h2> <asp:panel runat="server" id="panel1" backcolor="lightblue"> <p>This is childmaster content.</p> <asp:ContentPlaceHolder ID="ChildContent1" runat="server" /> </asp:panel> <asp:panel runat="server" id="panel2" backcolor="pink"> <p>This is childmaster content.</p> <asp:ContentPlaceHolder ID="ChildContent2" runat="server" /> </asp:panel> <br /> </asp:panel> </asp:Content>
<%@ Master Language="C#" MasterPageFile="~/Parent.master"%> <asp:Content id="Content1" ContentPlaceholderID="MainContent" runat="server"> <asp:panel runat="server" id="panelMain" backcolor="lightyellow"> <h2>Child master</h2> <asp:panel runat="server" id="panel1" backcolor="lightblue"> <p>This is child master content.</p> <asp:ContentPlaceHolder ID="ChildContent1" runat="server" /> </asp:panel> <asp:panel runat="server" id="panel2" backcolor="pink"> <p>This is child master content.</p> <asp:ContentPlaceHolder ID="ChildContent2" runat="server" /> </asp:panel> <br /> </asp:panel> </asp:Content>
This is a child file that references the child master page:
<%@ Page Language="VB" MasterPageFile="~/Child.master"%> <asp:Content id="Content1" ContentPlaceholderID="ChildContent1" runat="server"> <asp:Label runat="server" id="Label1" text="Child label1" font-bold="true" /> <br> </asp:Content> <asp:Content id="Content2" ContentPlaceholderID="ChildContent2" runat="server"> <asp:Label runat="server" id="Label2" text="Child label2" font-bold="true"/> </asp:Content>
<%@ Page Language="C#" MasterPageFile="~/Child.master"%> <asp:Content id="Content1" ContentPlaceholderID="ChildContent1" runat="server"> <asp:Label runat="server" id="Label1" text="Child label1" font-bold="true" /> <br /> </asp:Content> <asp:Content id="Content2" ContentPlaceholderID="ChildContent2" runat="server"> <asp:Label runat="server" id="Label2" text="Child label2" font-bold="true"/> </asp:Content>
Other Resources
You're absolutely right. There isn't a master attribute on the @Master directive. Questions whether it's worth the trouble of going through the practice test. No doubt one can feel they haven’t taken in the material with misleading information like this.
I saw another one where the correct answer wouldn’t even compile.
Question:
ID: 515P_5.2_01
You are developing an ASP.NET web application that uses a SqlCommand object named cmd to execute a stored procedure. The stored procedure returns a value that you need to retrieve and display in a TextBox control named ResultsTextBox.
Which code segment should you use?
Correct Answers:
cmd.Parameters.Add(newSqlParameter("@RETURN_VALUE", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, ((System.Byte)(10)), ((System.Byte)(0)), "", System.Data.DataRowVersion.Current, null));
cmd.ExecuteNonQuery();
ResultsTextBox.Text =(int)cmd.Parameters["@RETURN_VALUE"].Value.ToString(); // compile error
Hope the real test isn’t like this.
There is a question on the practice test that asks what the declaration is for a nested Master File to which I responded with the answer:-
<% @ Master Language="C#" MasterPageFile="~/Master.master" Title="Master Page 1" %>
According to the test the correct answer is:-
<%@ Master Language="C#" master="Blue.master"%>
"A child master page has the file name extension .master. However, the child master page also has a master attribute in the "@ Master" declaration, just like a content page."
This 'correct' answer contradicts this MSDN page and the fact that the master attribute does not even exist?!
Can someone please clarify that the exam question is wrong? I have my real exam tomorrow!
Thanks,
Will