Foros del Web » Programación para mayores de 30 ;) » .NET »

MasterPages con varios ContentPlaceHolder

Estas en el tema de MasterPages con varios ContentPlaceHolder en el foro de .NET en Foros del Web. Hola a todos. Soy bastante nuevo en ASP.NET y estoy tratando de diseñar de manera modular una pequeña aplicación. Vengo de PHP y allí los ...
  #1 (permalink)  
Antiguo 26/08/2008, 02:30
 
Fecha de Ingreso: agosto-2008
Mensajes: 3
Antigüedad: 15 años, 8 meses
Puntos: 0
MasterPages con varios ContentPlaceHolder

Hola a todos.

Soy bastante nuevo en ASP.NET y estoy tratando de diseñar de manera modular una pequeña aplicación. Vengo de PHP y allí los includes están a la orden del día, pero en ASP.NET me he encontrado con muchos problemas al combinarlos con controles de servidor por lo que voy a optar por usar MasterPages.

Mi problema es que no se como conseguir que en una misma MasterPage se me carguen varias ContanetPages diferentes a la vez. Me explico. Imaginemos que tengo una MasterPage dividida en 4 ContentPlaceHolders:
CPHHeader (para las cabecera o banners)
CPHMenu (para el menu de navegación)
CPHContents (para los contenidos propiamente dichos)
CPHFooter (para el pie de página u otrso banners)

Y pongamos que quiero cargar de manera simultánea las siguientes páginas en dichos PlaceHolders:
CPHHeader -> header.aspx
CPHMenu ->privateMenu.aspx o publicMenu.aspx (según convenga)
CPHContents -> cualquiera de las páginas de contenidos de mi sitio web.
CPHFooter -> footer.aspx

El problema que surge, es que cuando llamo a una de las páginas (por ejemplo contenidos1.aspx para que se carga en el CPHContens) los demás ContentPlaceHolders se quedan en blanco y no cargan nada.

¿Hay alguna manera de decirle a un ContentPlaceHolder de una MasterPage que cargue una página por defecto?

Muchas gracias a todos y un saludo
  #2 (permalink)  
Antiguo 26/08/2008, 04:31
 
Fecha de Ingreso: agosto-2005
Mensajes: 33
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: MasterPages con varios ContentPlaceHolder

En el codigo de asp, de la pagina que quieras cargar en cada contentholder, puedes especificar el nombre del control en el que se cargara...

Código:
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="privateMenu.aspx.vb" Inherits="privateMenu" Title="Prueba menu1" %>

<asp:Content ID="Content2" ContentPlaceHolderID="CPHMenu" Runat="Server">
  #3 (permalink)  
Antiguo 26/08/2008, 05:34
 
Fecha de Ingreso: agosto-2008
Mensajes: 3
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: MasterPages con varios ContentPlaceHolder

Hola y gracias por la respueta tan rápida.

En efecto, a una ContentPage se le puede indicar en qué MasterPage debe ser visualizada. El problema está en que a una MasterPage no se cómo decirle qué ContentPage debe cargar por defecto.

Con lo que me has escrito, que es como yo lo tengo, sólo consigo que la página de Contenidos invocada desde un enlace se ves correctamente en su MasterPage, pero el resto de huecos de la MasterPage permanecen vacíos.

Te pongo un ejemplo de como sería mi MasterPage:

Código:
<%@ Master AutoEventWireup="true" CodeFile="Public.master.cs" Inherits="Layout" Language="C#" %>
<!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 id="Head1" runat="server">
</head>

<body>
   <asp:contentplaceholder id="CPHheader" runat="server">
   </asp:contentplaceholder>

   <asp:contentplaceholder id="CPHmenu" runat="server">
   </asp:contentplaceholder>

   <asp:contentplaceholder id="CPHcontents" runat="server">
   </asp:contentplaceholder>

   <asp:contentplaceholder id="CPHfooter" runat="server">
   </asp:contentplaceholder>

</body>

</html>
Y un ejemplo de cómo sería mis ContentPage:
header.aspx
Código:
<%@ Page AutoEventWireup="true" CodeFile="header.aspx.cs" Inherits="header" Language="C#" MasterPageFile="~/Public.master" Title="My Header" %>
<asp:Content ID="Content1" ContentPlaceHolderID="CPHheader" Runat="Server">
   Aquí va la cabecera
</asp:Content>
menuPublic.aspx
Código:
<%@ Page AutoEventWireup="true" CodeFile="menuPublic.aspx.cs" Inherits="menuPublic" Language="C#" MasterPageFile="~/Public.master" Title="My menu" %>
<asp:Content ID="Content1" ContentPlaceHolderID="CPHmenu" Runat="Server">
   Aquí va un menú
</asp:Content>

home.aspx
Código:
<%@ Page AutoEventWireup="true" CodeFile="home.aspx.cs" Inherits="home" Language="C#" MasterPageFile="~/Public.master" Title="My Home" %>
<asp:Content ID="Content1" ContentPlaceHolderID="CPHcontents" Runat="Server">
   Aquí va una de contenidos
</asp:Content>

footer.aspx
Código:
<%@ Page AutoEventWireup="true" CodeFile="footer.aspx.cs" Inherits="footer" Language="C#" MasterPageFile="~/Public.master" Title="My Header" %>
<asp:Content ID="Content1" ContentPlaceHolderID="CPHfooter" Runat="Server">
   Aquí va el pie de página
</asp:Content>
Con esta estructura, si llamo a home.aspx, la veré bien en mi MasterPage, pero el resto de la MasterPage estará vacía.
  #4 (permalink)  
Antiguo 30/01/2012, 00:51
 
Fecha de Ingreso: junio-2011
Mensajes: 4
Antigüedad: 12 años, 10 meses
Puntos: 0
Respuesta: MasterPages con varios ContentPlaceHolder

Hola a todos!.. Tengo el mismo problema... necesito incluir varias páginas aspx que estan en el proyecto y visualizarla en un master page, no logro encontrar como hacer para que una MasterPage cargue varios Contents sin tener que reescribirlos, si supuestamente ya los tengo separados para que no se vea tan sucio el código Muesto un ejemplo de como necesito que salga

Algo así sería el Master maquetado (sin estilos ni nada) Modelo.master
Código ASP:
Ver original
  1. <%@ Master Language="C#" AutoEventWireup="true" CodeFile="Modelo.master.cs" Inherits="Index" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7.     <title></title>
  8. <link href="css/estilos1.css" rel="stylesheet" type="text/css" />
  9. </head>
  10. <body>
  11.   <form id="form1" runat="server">
  12.         <div>
  13.              <asp:ContentPlaceHolder id="CPHInfo" runat="server">
  14.         </div>
  15.        <div>
  16.              <asp:ContentPlaceHolder id="CPHLogin" runat="server">
  17.       </div>
  18.     </form>
  19. </body>
  20. </html>


Una de las paginas que deseo incluir no es solo texto sino que tiene campos para llenar y demás..
Login.aspx

Código ASP:
Ver original
  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Modelo.master" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
  2.  
  3. <asp:Content ID="Content1" ContentPlaceHolderID="CPHLogin" Runat="Server">
  4.    Iniciar Sesión
  5.  
  6. Correo Electrónico:<asp:TextBox ID="txtLogin_Correo" runat="server" ></asp:TextBox>
  7. Contraseña:<asp:TextBox ID="txtLogin_Password" runat="server"></asp:TextBox>
  8. <asp:Button ID="btnLogin_Entrar" runat="server" onclick="btnEntrar_Click" Text="Iniciar Sesión" />
  9.  
  10. </asp:Content>

Y uno de los otros puede ser info.aspx

Código ASP:
Ver original
  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Master.master" AutoEventWireup="true" CodeFile="Info.aspx.cs" Inherits="Info" %>
  2.  
  3. <asp:Content ID="ContentInfo" ContentPlaceHolderID="CPHInfo" Runat="Server">
  4. Bla bla bla info x...
  5. </asp:Content>

¿Cómo puedo hacer para ver solo una pagina con los dos contenidos sin usar Iframe?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:32.