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 &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 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 и добавить идентификатор местозаполнителя контента, соответствующий местозаполнителю на главной странице.

Вы можете прочитать эту ссылку для более подробной информации