Странность главной страницы - «Элементы управления содержимым должны быть элементами управления верхнего уровня на странице содержимого или вложенной главной странице, которая ссылается на главную страницу». - PullRequest
64 голосов
/ 07 мая 2009

Это странно. Я добавил новый проект веб-приложения в свое решение в 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>

Ответы [ 12 ]

77 голосов
/ 07 мая 2009

Ваша веб-форма не должна содержать всю эту разметку (например, тег <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, обязательно отметьте «выбрать главную страницу» в диалоговом окне «Добавить новый элемент».

53 голосов
/ 07 мая 2009

Вот еще один способ использования Visual Studio: если вы создадите новый элемент в Visual Studio и выберете веб-форму, она создаст автономную веб-форму * .aspx, которая используется для текущей веб-формы (это то, что вы сделал?). Вам нужно выбрать форму веб-контента, а затем выбрать главную страницу, которую вы хотите прикрепить к ней.

6 голосов
/ 07 мая 2009

Ваша веб-форма должна выглядеть так:

<%@ 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 голосов
/ 07 мая 2009

Почему-то нет опции в диалог создания страницы, чтобы выбрать главная страница Я пробовал оба программно объявляя МП и обновив свойство в Панель свойств. - NoCarrier 13 минут назад

Я верю, потому что я использую "сеть" приложение "против" веб-сайта "- NoCarrier 9 минут назад

Скорее всего, это проблема в теге <@PAGE>. Тем не менее, это не имеет значения, если вы используете веб-приложение или нет. Чтобы создать дочернюю страницу, щелкните правой кнопкой мыши свою главную страницу в обозревателе решений и выберите «Добавить страницу содержимого».

4 голосов
/ 07 мая 2009

Когда вы создавали веб-форму, вы выбрали главную страницу, к которой она прикреплена, в самом диалоговом окне «Добавить новый элемент»? Или вы прикрепили его вручную, используя атрибут MasterPageFile директивы @Page? Если бы это было последнее, это могло бы объяснить полученное вами сообщение об ошибке.

VS автоматически вставляет определенную разметку в каждый тип страницы. Если вы выбираете MasterPage во время создания самой страницы, она не создает никакой разметки, кроме объявления @Page и элемента управления содержимым верхнего уровня.

3 голосов
/ 31 января 2013

Я только что столкнулся с этим исключением, и в моем случае оно было вызвано пробелом между элементами 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>
3 голосов
/ 29 ноября 2010

Только что получил эту проблему. Это потому, что у нас был тег, заканчивающийся двойной косой чертой:

<//asp:HyperLink>
2 голосов
/ 14 декабря 2012
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";
}
2 голосов
/ 11 августа 2011

Лучше поздно, чем никогда, я полагаю ... у вас есть возможность установить MASTERPAGE только для вас, разрабатывающих ВЕБ-САЙТ (ФАЙЛ> НОВЫЙ> ВЕБ-САЙТ) ... но не при создании проекта ASP.NET (ФАЙЛ > NEW> PROJECT) - здесь вы должны установить мастер-страницу, используя свойства только что созданной веб-формы, и вы можете изменить исходный код ASPX, чтобы сделать его совместимым с главной страницей (т. Е. Удалить исходный HTML и т. Д.)

1 голос
/ 05 февраля 2016

Я обнаружил эту ошибку после редактирования страницы веб-части (.aspx) в SharePoint Designer 2013. Когда я посмотрел код в SPD, элемент H1 в верхней части страницы был выделен желтым цветом. Наведение указателя мыши на это означало, что SharePoint: AjaxDelta не был закрыт до H1. Добавление </SharePoint:AjaxDelta> исправлено.

Странно, потому что казалось, что SPD ввел ошибку после того, как я работал над веб-частями списка просмотра или веб-частью просмотра страниц в другом месте на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...