这很奇怪。我在Visual Studio 2008中为我的解决方案添加了一个全新的Web应用程序项目。
创建了母版页。零修改。 创建了一个新的webform。将其母版页设置为刚刚创建的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>
答案 0 :(得分:76)
您的网络表单不应包含所有标记(例如<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页面时,请务必在“添加新项目”对话框中选中“选择母版页”。
答案 1 :(得分:53)
这是使用Visual Studio的另一种方式:如果您在Visual Studio中执行New Item并选择Web Form,它将创建一个独立的* .aspx Web表单,这是您当前Web表单的内容(这就是你的意思)做?)。您需要选择Web Content Form,然后选择要附加到其上的母版页。
答案 2 :(得分:6)
您的网络表单应如下所示:
<%@ 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 >head%lt; -->
</asp:Content>
<asp:Content runat="server" ID="content" ContentPlaceHolderId="ContentPlaceHolder1">
<h1>Your content</h1>
</asp:Content>
请注意,没有<html>
标记
答案 3 :(得分:4)
创建WebForm时,是否在“添加新项”对话框中选择了它所附加的主页面?或者您是否使用MasterPageFile
指令的@Page
属性手动附加了它?如果是后者,它可能会解释您收到的错误消息。
VS会自动在每种页面中插入某些标记。如果您在创建页面时选择MasterPage,除了@Page
声明和顶级Content控件之外,它不会生成任何标记。
答案 4 :(得分:4)
出于某种原因,没有选择 创建页面对话框以选择a 母版页。我试过了两个 以编程方式声明MP和 通过更新中的属性 属性窗格。 - NoCarrier 13分钟 前
我相信它,因为我使用的是“网络” 申请“vs a”网站“ - NoCarrier 9分钟前
可能在&lt; @ PAGE&gt;中标记您的问题所在。也就是说,如果您使用的是Web应用程序,它并没有什么区别。要创建子页面,请在解决方案资源管理器中右键单击主页面,然后选择添加内容页面。
答案 5 :(得分:3)
刚刚遇到这个问题。 这是因为我们有一个以双斜线结尾的标签:
<//asp:HyperLink>
答案 6 :(得分:3)
我刚遇到此异常,在我的情况下,它是由asp:content elements
之间的空格引起的所以,这失败了:
<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>
答案 7 :(得分:2)
比我从未想象的更好......你可以选择设置MASTERPAGE,只有你正在开发一个WEB站点(文件&gt;新&gt;网站)...但是当你创建一个ASP.NET项目时却没有(FILE&gt; ; NEW&gt; PROJECT) - 您必须使用新创建的webform的属性设置主页面,并且由您来修改ASPX源以使其符合母版页(即删除库存HTML等...)
答案 8 :(得分: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";
}
答案 9 :(得分:1)
在SharePoint Designer 2013中编辑Web部件(.aspx)页面后遇到此错误。当我查看SPD中的代码时,页面顶部附近的H1元素突出显示为黄色。将鼠标悬停在上面表示SharePoint:AjaxDelta在H1之前未关闭。添加</SharePoint:AjaxDelta>
修复它。
很奇怪,因为在我使用listview web部件或页面上其他地方的页面查看器Web部件后,SPD出现了错误。
答案 10 :(得分:0)
就我而言,我是在页面中动态加载用户控件,并且页面和用户控件都具有内容标签
((int) x / theNumber) * theNumber)
从用户控件中删除此标签对我有用。
答案 11 :(得分:0)
您需要添加 asp内容,并添加与母版页中的占位符相对应的内容占位符ID 。
您可以阅读此link以获得更多详细信息
答案 12 :(得分:0)
在我的情况下,asp:content标记中缺少runat="server"
。我知道这很愚蠢,但是可能有人从我所获得的构建中的代码中删除了。
对我有用。有人可能会遇到同样的事情。因此共享。