"Элементы управления содержимым должны быть элементами управления верхнего уровня на странице содержимого или вложенной главной странице, ссылающейся на главную страницу."
Это странно. Я добавил новый проект веб-приложения в свое решение в 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 >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 или веб-частью просмотра страниц в другом месте на странице.