"Элементы управления содержимым должны быть элементами управления верхнего уровня на странице содержимого или вложенной главной странице, ссылающейся на главную страницу."

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

Если я делаю то же самое в автономном проекте, который находится вне этого решения, это работать отлично. Имейте в виду, что я использую проект веб-приложения против проекта веб-сайта, если это имеет значение.

webform:

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

10 ответов


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


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


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

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


при создании веб-формы вы выбрали главную страницу, к которой она прикреплена, в диалоговом окне "Добавить новый элемент"? Или вы прикрепили его вручную, используя на


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

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

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


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

<//asp:HyperLink>

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

лучше поздно, чем никогда, я полагаю... вы получаете возможность установить MASTERPAGE только вы разрабатываете веб-сайт (файл>создать>веб-сайт)... но не тогда, когда вы создаете ASP.NET project (FILE>NEW>PROJECT) - там вы должны установить Masterpage, используя свойства недавно созданной веб-формы, и это до вас, чтобы изменить источник ASPX, чтобы сделать его master page совместимым (т. е. удаление запаса 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";
}

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

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