2010-10-25 11 views

Respuesta

36

Simplemente agregue un CSS ContentPlaceHolder con un valor predeterminado en él.

Básicamente, se incluirá el archivo CSS que especifique como predeterminado a menos que anule ese marcador de posición con una etiqueta <asp:Content /> desde una página secundaria.

Su página maestra debería verse más o menos así.

<head> 
    <asp:ContentPlaceHolder ID="Stylesheets" runat="server"> 
     <link rel="stylesheet" href="/css/master.css" type="text/css" /> 
    </asp:ContentPlaceHolder> 
</head> 

Luego, desde cualquiera de las páginas que utilizan esa página maestra, simplemente puede anular que con una hoja de estilo diferente.

On (ejemplo) AboutUs.aspx

<asp:Content ID="Content1" ContentPlaceHolderID="Stylesheets" runat="server"> 
    <link rel="stylesheet" href="/css/form.css" type="text/css" /> 
</asp:Content> 
+3

+1 De hecho, me gusta esta solución mejor que mi sugerencia. Lo he usado antes y es una buena opción. Sin embargo, dejaré mi respuesta, ya que alguien podría encontrarla útil. –

6

Puede usar más de una página maestra en su sitio.

También puede usar páginas maestras anidadas. El nivel superior puede tener la estructura general del sitio, y luego una página maestra anidada por el Maestro para cada una de sus diferentes áreas.

Cuando hace clic derecho en su proyecto y selecciona Agregar, elige la opción WebContentForm, en lugar de WebForm. Luego puede seleccionar la página maestra apropiada.

En sus páginas maestras anidadas, establece el MasterPageFile igual a su página maestra de nivel superior.

Editar Cuando se combina con el enfoque de Marko @ que podría tener el siguiente ...

La ventaja aquí es que todas las sustituciones solamente tienen que ser escrita una vez.

nivel superior MasterPage:

<head> 
    <asp:ContentPlaceHolder ID="Stylesheets" runat="server"> 
     <link rel="stylesheet" href="/css/default.css" type="text/css" /> 
    </asp:ContentPlaceHolder> 
</head> 

anidada MasterPage sin anulación

<%@ Page Language="C#" MasterPageFile="~/Site.master"%> 
//don't reference the Stylesheets ContentPlaceHolder and the default is rendered 

anidada MasterPage Uno con override.css

<%@ Page Language="C#" MasterPageFile="~/Site.master"%> 
<asp:Content ID="Content1" ContentPlaceHolderID="Stylesheets" runat="server"> 
    <link rel="stylesheet" href="/css/override.css" type="text/css" /> 
</asp:Content> 

anidada MasterPage Dos con secondOverride.css

<%@ Page Language="C#" MasterPageFile="~/Site.master"%> 
<asp:Content ID="Content1" ContentPlaceHolderID="Stylesheets" runat="server"> 
    <link rel="stylesheet" href="/css/secondOverride.css" type="text/css" /> 
</asp:Content> 

Luego, simplemente configure la página maestra apropiada en cualquiera de sus formularios web.

+0

is'nt Hay alguna forma de simplemente incluir la referencia CSS en mi página de la cual hereda la página maestra? –

+0

Sí, mira la respuesta de Marko. Una combinación de los dos enfoques podría funcionar perfectamente. –

+0

Referencia útil de Microsoft en páginas maestras anidadas: https://msdn.microsoft.com/en-us/library/x2b3ktt7%28v=vs.140%29.aspx – Roberto

5

En mi situación, he utilizado la misma masterpage desde diferentes ubicaciones en la solución. Y puesto que el prefijo (tilde) ~ en la referencia a mis archivos CSS, he añadido un response.write a la referencia de este modo:

<%= ResolveUrl("~/css/myStyle.css") %> 
+0

gracias, esto funcionó para mí, pero ¿sabes que usar <% = ResolveUrl ("~/xxx")%> tiene alguna desventaja? – curiousBoy

Cuestiones relacionadas