代码之家  ›  专栏  ›  技术社区  ›  NoCarrier

母版页怪异-“内容控件必须是内容页或引用母版页的嵌套母版页中的顶级控件。”

  •  63
  • NoCarrier  · 技术社区  · 17 年前

    这很奇怪。我在VisualStudio2008中将一个全新的Web应用程序项目添加到我的解决方案中。

    创建母版页。没有做任何修改。

    不过,没有修改。没有标记。没有用户控件。没有参考资料。没有什么但是,当我尝试运行它时,我得到:

    Content controls have to be top-level controls in a content page or a nested master page that references a master page.
    HttpException (0x80004005): Content controls have to be top-level controls in a content page or a nested master page that references a master page.]
       System.Web.UI.MasterPage.CreateMaster(TemplateControl owner, HttpContext context, VirtualPath masterPageFile, IDictionary contentTemplateCollection) +8665016
       System.Web.UI.Page.get_Master() +51
       System.Web.UI.Page.ApplyMasterPage() +15
       System.Web.UI.Page.PerformPreInit() +45
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +282
    

    如果我在这个解决方案之外的独立项目中做同样的事情,它会很好地工作。请记住,我使用的是一个web应用程序项目,而不是一个网站项目,如果这有什么区别的话。

    网络表单:

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>
    
    <!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>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
    
        </div>
        </form>
    </body>
    </html>
    

    母版页:

    <%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site1.master.vb" Inherits="WebUI.Site1" %>
    
    <!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>
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
    
            </asp:ContentPlaceHolder>
        </div>
        </form>
    </body>
    </html>
    
    10 回复  |  直到 10 年前
        1
  •  82
  •   JerSchneid    17 年前

    您的web表单不应该包含所有这些标记(如 <html> 标签)。因为它有一个母版页,所以您只需从内容标签开始。您的aspx页面应如下所示:

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>
    
    <asp:content id="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
       This is the body!
    </asp:content>
    

    添加新的aspx页面时,请确保选中“添加新项目”对话框中的“选择母版页”。

        2
  •  57
  •   George Stocker NotMe    12 年前

    这里是使用Visual Studio的另一种方法:如果您在Visual Studio中创建新项并选择Web表单,它将创建一个独立的*.aspx Web表单,这就是您当前Web表单的内容(您这样做了吗?)。您需要选择Web内容表单,然后选择要附加到该表单的母版页。

        3
  •  7
  •   meJustAndrew    10 年前

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WebUI._Default" MasterPageFile="~/Site1.Master" %>
    <asp:Content runat="server" ID="head" ContentPlaceHolderId="head">
    <!-- stuff you want in &gt;head%lt; -->
    </asp:Content>
    
    <asp:Content runat="server" ID="content" ContentPlaceHolderId="ContentPlaceHolder1">
    <h1>Your content</h1>
    </asp:Content>
    

    请注意,没有 <html>

        4
  •  4
  •   Cerebrus    17 年前

    创建Web表单时,您是否在“添加新项目”对话框中选择了它附加到的母版页?或者您是否使用 MasterPageFile @Page 指令?如果是后者,它可能会解释您收到的错误消息。

    VS会自动在每种页面中插入某些标记。如果在创建页面时选择母版页,则它不会生成除 @页面 声明和顶级内容控件。

        5
  •  4
  •   Serapth    17 年前

    “创建页面”对话框以选择 以编程方式声明MP和 属性窗格。无载波13分钟 以前

    “应用程序”与“网站”

        6
  •  3
  •   Daniel Ryan    15 年前

    我只是遇到了这个问题。 这是因为我们有一个以双斜杠结尾的标记:

    <//asp:HyperLink>
    
        7
  •  3
  •   Thorgeir    13 年前

    我刚刚遇到了这个异常,在我的例子中,它是由asp:content元素之间的空白引起的

    因此,这失败了:

    <asp:content runat="server" ContentPlaceHolderID="Header">
        Header
    </asp:content>
    
    <asp:Content runat="server" ContentPlaceHolderID="Content">
        Content
    </asp:Content>
    

    <asp:content runat="server" ContentPlaceHolderID="Header">
        Header
    </asp:content><asp:Content runat="server" ContentPlaceHolderID="Content">
        Content
    </asp:Content>
    
        8
  •  2
  •   Bill Roberts    15 年前

        9
  •  2
  •   Mxyk Edda    13 年前
    protected void Page_PreInit(object sender, EventArgs e) 
    { 
     if (Membership.GetUser() == null) //check the user weather user is logged in or not
        this.Page.MasterPageFile = "~/General.master";
     else
        this.Page.MasterPageFile = "~/myMaster.master";
    }
    
        10
  •  1
  •   G. Laushine    10 年前

    </SharePoint:AjaxDelta> 修好了。

    奇怪的是,SPD似乎是在我处理listview web部件或页面上其他地方的页面查看器web部件时引入错误的。

        11
  •  1
  •   Pajri Aprilio    7 年前

    asp内容

    link 更多细节

        12
  •  0
  •   Mohammed Siddiq    7 年前

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    

    从用户控件中删除此标记对我很有用。

        13
  •  0
  •   Sudeep nayak    5 年前

    就我而言 runat="server"

    这对我有用。有些人可能会面临同样的问题。因此共享。