主页面古怪 – “内容控件必须是引用主页面的内容页面或嵌套主页面中的顶层控件。”

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

创build了一个母版页。 做零修改。 创build了一个新的webform。 将其主页面设置为刚刚创build的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 

如果我在这个解决scheme以外的独立项目中做同样的事情,它可以正常工作。 请记住,我正在使用一个Web应用程序项目与网站项目,如果有任何区别。

networking表格:

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

这里是使用Visual Studio的另一种方法:如果在Visual Studio中执行New Item,并selectWeb Form,则将创build一个独立的* .aspx Web窗体,这就是您当前的Web窗体所具有的function(是您所做的? 。 您需要selectWeb内容表单,然后select您要附加的主页面。

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

你的网页forms应该是这样的:

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

创buildWebForm时,是否在“添加新项目”对话框中select了附加的主页面? 或者你是否使用@Page指令的MasterPageFile属性手动添加它? 如果是后者,它可能会解释您收到的错误消息。

VS自动在每种页面中插入一定的标记。 如果您在创build页面时selectMasterPage,则不会生成除@Page声明和顶级Content控件之外的任何标记。

出于某种原因,在创build页面对话框中没有select母版页的选项。 我已经试图通过编程方式声明MP并更新属性窗格中的属性。 – NoCarrier 13分钟前

我相信它是因为我在9分钟前使用“networking应用程序”而不是“网站” – NoCarrier

有可能是你的问题出现在<@PAGE>标签中。 也就是说,如果您使用的是Web应用程序,它没有什么区别。 要创build一个子页面,在解决scheme资源pipe理器中右键单击您的母版页并select添加内容页面。

刚刚有这个问题。 这是因为我们有一个以双斜线结尾的标签:

 <//asp:HyperLink> 

我刚刚遇到这个exception,在我的情况下,这是由asp:内容元素之间的空白

所以,这失败了:

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

比从来没有更好的延迟,我想…你可以select只设置MASTERPAGE你正在开发一个网站(文件>新build>网站)…但不是当你创build一个ASP.NET项目(文件>新build> PROJECT) – 你必须使用新创build的webform的属性来设置主页面,这取决于你修改ASPX源代码以使其符合母版页(即删除股票HTML等)

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

在SharePoint Designer 2013中编辑Web部件(.aspx)页面后,我遇到了这个错误。当我查看SPD中的代码时,页面顶部附近的一个H1元素被突出显示为黄色。 将鼠标hover在上面,表明SharePoint:AjaxDelta在H1之前没有closures。 添加</SharePoint:AjaxDelta>修复了它。

奇怪,因为它出现SPD介绍了错误,当我在页面上其他地方的ListView的Web部件或页面查看器Web部件的工作。