asp.net visual-studio-2008 master-pages

asp.net - Rareza de página maestra: "Los controles de contenido tienen que ser controles de nivel superior en una página de contenido o una página maestra anidada que hace referencia a una página maestra".



visual-studio-2008 master-pages (10)

Por alguna razón, no hay ninguna opción en el diálogo Crear página para seleccionar una página maestra. He intentado tanto declarar programáticamente el MP como actualizando la propiedad en el panel de Propiedades. - NoCarrier hace 13 minutos

Creo que es porque estoy usando una "aplicación web" frente a un "sitio web" - NoCarrier hace 9 minutos

Lo más probable es que esté en la etiqueta <@PAGE> donde está tu problema. Dicho eso, no importa si estás usando una aplicación web o no. Para crear una página secundaria, haga clic con el botón derecho en su página maestra en el Explorador de soluciones y seleccione Agregar página de contenido.

Esto es extraño. Agregué un nuevo proyecto de aplicación web a mi solución en Visual Studio 2008.

Creó una página maestra Hecho cero modificaciones. Creado un nuevo formulario web. Establezca su página maestra en el MP que acabo de crear.

Aún así, no hay modificaciones. Sin marcado. Sin controles de usuario. Sin referencias Nada. Sin embargo, cuando intento ejecutarlo, obtengo:

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

Si hago exactamente lo mismo en un proyecto independiente que está fuera de esta solución, funciona bien. Tenga en cuenta que estoy usando un proyecto de aplicación web frente a un proyecto de sitio web si eso marca alguna diferencia.

El formulario web:

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

La página maestra:

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


Acabo de encontrar esta excepción y en mi caso fue causada por un espacio en blanco entre asp: elementos de contenido

Entonces, esto falló:

<asp:content runat="server" ContentPlaceHolderID="Header"> Header </asp:content> <asp:Content runat="server" ContentPlaceHolderID="Content"> Content </asp:Content>

Pero eliminando los espacios en blanco entre los elementos trabajados:

<asp:content runat="server" ContentPlaceHolderID="Header"> Header </asp:content><asp:Content runat="server" ContentPlaceHolderID="Content"> Content </asp:Content>


Acabo de entender este problema. Fue porque teníamos una etiqueta que terminaba con barras diagonales dobles:

<//asp:HyperLink>


Aquí hay otra forma de usar Visual Studio: si hace un nuevo elemento en Visual Studio y selecciona el formulario web, creará un formulario web independiente * .aspx, que es lo que tiene para su formulario web actual (¿esto es lo que hizo?) . Debe seleccionar el Formulario de contenido web y luego seleccionar la página maestra que desea adjuntar.


Cuando creó el WebForm, ¿seleccionó la página maestra a la que está adjunta en el cuadro de diálogo "Agregar nuevo elemento"? ¿O lo adjuntó manualmente utilizando el atributo MasterPageFile de la directiva @Page ? Si fue el último, podría explicar el mensaje de error que recibe.

VS inserta automáticamente ciertas marcas en cada tipo de página. Si selecciona la página maestra en el momento de la creación de la página, no genera ningún marcado excepto la declaración @Page y el control de contenido de nivel superior.


Más vale tarde que nunca, supongo ... usted tiene la opción de configurar MASTERPAGE solo de usted está desarrollando un SITIO WEB (ARCHIVO> NUEVO> SITIO WEB) ... pero no cuando crea un proyecto ASP.NET (ARCHIVO> NUEVO> PROYECTO) - allí tiene que configurar la página maestra con las propiedades del formulario web recién creado y depende de usted modificar la fuente ASPX para que sea compatible con la página maestra (es decir, eliminar el código HTML, etc.)


Me encontré con este error después de editar una página de parte web (.aspx) en SharePoint Designer 2013. Cuando miré el código en SPD, un elemento H1 cerca de la parte superior de la página se resaltó en amarillo. Al pasar el cursor sobre eso, se indicó que SharePoint: AjaxDelta no se cerró antes de la H1. Agregar el </SharePoint:AjaxDelta> solucionó.

Extraño porque apareció SPD introdujo el error después de que estaba trabajando en partes web de la vista de lista o un elemento web del visor de páginas en otro lugar de la página.


Su formulario web debe verse así:

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

Tenga en cuenta que no hay etiqueta <html>


Su formulario web no debe tener todo el marcado (como la etiqueta <html> ). Como tiene una página maestra, simplemente comienza con la etiqueta de contenido. Su página aspx debería verse así:

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

Cuando agregue una nueva página aspx, asegúrese de marcar "seleccionar página maestra" en el cuadro de diálogo "agregar nuevo elemento".


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"; }