Masterpage Weirdness - "Элементы управления содержимым должны быть элементами верхнего уровня на странице содержимого или вложенной главной страницей, которая ссылается на главную страницу".
Это странно. Я добавил новый проект веб-приложения для своего решения в Visual Studio 2008.
Создал главную страницу. Сделал нулевые изменения.
Создал новую веб-форму. Установите свою главную страницу в 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
Если я делаю то же самое в автономном проекте, который находится за пределами этого решения, он отлично работает. Имейте в виду, что я использую проект веб-приложений и проект веб-сайта, если это имеет значение.
Веб-форма:
<%@ 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
Другой способ использования Visual Studio: если вы создаете новый элемент в Visual Studio и вы выбираете Web Form, он создаст автономную *.aspx веб-форму, которая у вас есть для вашей текущей веб-формы (это то, что вы сделал?). Вам нужно выбрать форму веб-содержимого, а затем выбрать главную страницу, к которой вы хотите подключиться.
Ответ 2
Ваша веб-форма не должна содержать всю эту разметку (например, тег <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, обязательно проверьте "выберите главную страницу" в диалоговом окне "Добавить новый элемент".
Ответ 3
Ваша веб-форма должна выглядеть так:
<%@ 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>
Ответ 4
Когда вы создали WebForm, вы выбрали главную страницу, к которой она присоединена, в диалоговом окне "Добавить новый элемент"? Или вы прикрепляли его вручную, используя атрибут MasterPageFile
директивы @Page
? Если это последний, это может объяснить сообщение об ошибке, которое вы получаете.
VS автоматически вставляет определенную разметку в каждый вид страницы. Если вы выбираете MasterPage во время создания страницы, она не генерирует разметки, кроме объявления @Page
и верхнего уровня Content control.
Ответ 5
По какой-то причине в диалог создания страницы, чтобы выбрать главная страница. Я попробовал оба программно декларируя МП и путем обновления свойства в Панель свойств. - NoCarrier 13 мин. назад
Я верю, потому что я использую веб-сайт приложение "против" веб-сайта "- NoCarrier 9 мин назад
Скорее всего, это в теге < @PAGE > , где находится ваша проблема. Тем не менее, это не имеет значения, если вы используете веб-приложение или нет. Чтобы создать дочернюю страницу, щелкните правой кнопкой мыши на главной странице в обозревателе решений и выберите "Добавить страницу содержания".
Ответ 6
Просто эта проблема.
Это было потому, что у нас был тег, заканчивающийся двойными слэшами:
<//asp:HyperLink>
Ответ 7
Я только столкнулся с этим исключением, и в моем случае это вызвало пробел между элементами 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
Лучше поздно, чем никогда, я полагаю... вы получаете возможность установить только MASTERPAGE, что вы разрабатываете WEB-САЙТ (FILE > NEW > WEBSITE)... но не при создании проекта ASP.NET(FILE > NEW > PROJECT) - вам нужно установить мастер-страницу с использованием свойств вновь созданной веб-формы и ее до вас, чтобы изменить источник ASPX, чтобы сделать его совместимым с главной страницей (т.е. Удалением HTML файла и т.д.).
Ответ 9
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
Я столкнулся с этой ошибкой после редактирования страницы веб-части (.aspx) в SharePoint Designer 2013. Когда я посмотрел на код в SPD, элемент H1 в верхней части страницы был выделен желтым цветом. Наведите указатель мыши на то, что SharePoint: AjaxDelta не был закрыт перед H1. Добавление </SharePoint:AjaxDelta>
исправлено.
Странно, потому что появилось сообщение об ошибке SPD после того, как я работал над веб-сайтами listview или веб-частью просмотра веб-страниц в другом месте на странице.
Ответ 11
В моем случае я загружал пользовательский элемент управления динамически на странице, и как страница, так и пользовательский элемент управления имели теги содержимого
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
Удаление этого тега из пользовательского элемента управления работало для меня.
Ответ 12
Вам необходимо добавить содержимое asp и добавить идентификатор местозаполнителя контента, соответствующий местозаполнителю на главной странице.
Вы можете прочитать эту ссылку для более подробной информации