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


67

真奇怪 我在Visual Studio 2008的解决方案中添加了一个全新的Web应用程序项目。

创建一个母版页。进行零修改。创建了一个新的网络表单。将其主页设置为我刚创建的MP。

仍然没有任何修改。没有标记。没有用户控件。没有参考。没有。但是,当我尝试运行它时,我得到:

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>

1
可能有助于向我们展示有关Webform的内容。
大脑

Answers:


57

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


7
或在VS 2010中;Web Form using Master Page
彼得

81

您的网络表单不应包含所有标记(如<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页面时,请确保在“添加新项”对话框中选中“选择母版页”。


7

您的网络表单应如下所示:

<%@ 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

创建WebForm时,是否在“添加新项”对话框本身中选择了附加到的母版页?还是您使用指令的MasterPageFile属性手动附加了它@Page?如果是后者,则可能会解释您收到的错误消息。

VS自动在每种页面中插入某些标记。如果您在创建页面本身时选择了MasterPage,则除了@Page声明和顶级Content控件外,它不会生成任何标记。


由于某些原因,在创建页面对话框中没有选择母版页的选项。我已经尝试通过编程方式声明MP并通过更新“属性”窗格中的属性来进行尝试。
NoCarrier

我相信这是因为我使用的是“网站应用程序”与“网站”
NoCarrier,2009年

我看到您已经发布了Webform的标记。是的,它被呈现为未链接到母版页的网络表单,而不是链接到母版页的表单。我还看到其他人已经发布了链接到母版页时Web表单中标记的外观。
大脑

4

由于某些原因,“创建页面”对话框中没有选项来选择母版页。我已经尝试通过编程方式声明MP并通过更新“属性”窗格中的属性来进行尝试。– NoCarrier 13分钟前

我相信这是因为我使用的是“ Web应用程序”与“网站” – NoCarrier 9分钟前

问题可能出在<@PAGE>标记中。就是说,无论您是否使用Web应用程序,这都没有什么不同。要创建子页面,请在解决方案资源管理器中的母版页上单击鼠标右键,然后选择“添加内容页”。



3

我刚遇到此异常,在我的情况下,这是由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>

2

迟到总比不到我想的晚。。。只有在开发Web站点时,您才可以选择设置MASTERPAGE(文件> NEW> WEBSITE)。 PROJECT)-在那里,您必须使用新创建的Webform的属性来设置母版页,并且您需要修改ASPX源以使其与母版页兼容(即,删除原始HTML等)。


2
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";
}

1

在SharePoint Designer 2013中编辑Web部件(.aspx)页面后,我遇到此错误。当我在SPD中查看代码时,页面顶部附近的H1元素突出显示为黄色。将鼠标悬停在该位置上可以表明SharePoint:AjaxDelta在H1之前没有关闭。添加 </SharePoint:AjaxDelta>固定的。

很奇怪,因为在我处理页面视图Web部件或页面其他位置的页面查看器Web部件之后,SPD似乎引入了错误。



0

就我而言,我是在页面中动态加载用户控件,并且页面和用户控件都具有内容标签

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

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


0

就我而言runat="server",asp:content标记中缺少。我知道这很愚蠢,但是可能有人从我所获得的构建中的代码中删除了。

它为我工作。有人可能会遇到同样的事情。因此共享。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.