在嵌套母版页的时候,最后添加内容页的时候莫名的出来一个<% 在此添加内容控件 %>,搞得我一头雾水,不可能啊,内容页添加母版页和添加嵌套的母版页应该程序都是一样的啊?刚开始还BAIDU和GOOGLE了一样,居然没找到我遇到过的问题,看来神了,不可能就我一个人遇到了啊。最后还是根据VS2008的提示搞定了。总结一下。
刚开始我创建了第一个母版页MasterPage.master
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPages_MasterPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>第一个母版页</title> <asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div id="container"> <div id="main"> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </div> </div> </form> </body> </html>
然后创建第二个母版页MasterPage2.master,并且以MasterPage.master为母版
<%@ Master Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage3.master.cs" Inherits="MasterPages_MasterPage3" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <div id="main"> <div id="cpmain"> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> </asp:Content> </div> </div>
然后我就打算在内容页中test.aspx中直接选择MasterPage2.master为母版页,但是VS2008直接出来的代码就感觉很莫名其妙
<%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage3.master" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="test" Title="无标题页" %> <%-- 在此处添加内容控件 --%>
很明然这个是错误,最后排查错误出现在MasterPage2.master为母版页中,最重要的是MasterPage2.master必须把不需要改变的内容放在<asp:Content>控件中,然后在<asp:Content>中放入占位符<asp:ContentPlaceHolder>,而占位符中的内容就是以后内容页的内容。而我刚开始就很自然的把嵌套母版页的模式按照第一个母版页的模式套,很可惜是错误的。第一个母版页中根本就没有<asp:Content>控件。正确的嵌套母版页,MasterPage2.master:
<%@ Master Language="C#" MasterPageFile="~/MasterPages/MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage2.master.cs" Inherits="MasterPages_MasterPage2" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> <link href="../css/default.css" rel="stylesheet" type="text/css" /> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> <div id="worknews"> <p>首页 > 工作动态</p> <div id="worknews_main"> <ul> <asp:ContentPlaceHolder ID="cpcontentmain" runat="server"></asp:ContentPlaceHolder> </ul> </div> </div> </asp:Content>
最后重新创建一个以MasterPage2.master为母版页的test.aspx页面
<%@ Page Language="C#" MasterPageFile="~/MasterPages/MasterPage2.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" Title="无标题页" %> <asp:Content ID="Content1" ContentPlaceHolderID="cpcontentmain" Runat="Server"> </asp:Content>
这样就正常的页面。最重要的是要分清<asp:Content>和<asp:ContentPlaceHolder>。