.net asp.net user-controls master-pages

.net - ¿Cómo remito una página maestra Control de contenido desde un Control de usuario?



asp.net user-controls (2)

Tengo un control de usuario en él. Quiero ''inyectar'' algo en el encabezado de una página maestra. He intentado utilizar el siguiente enfoque (página maestra y código de control del usuario fragmentos de mmarkup) ...

Página principal:

<asp:ContentPlaceHolder ID="head" runat="server"> </asp:ContentPlaceHolder>

Control de usuario:

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> <link type="text/css" rel="stylesheet" href="/Shared/Css/Navigation.css" /> </asp:Content>

Pero eso da el error:

Los controles de contenido deben ser controles de nivel superior en una página de contenido o una página maestra anidada que haga referencia a una página maestra.

Entonces, ¿cómo pongo contenido en la página maestra en tiempo de ejecución desde un control?


Puede acceder a un contenido de páginas maestras a través de los métodos públicos de la página maestra. Entonces, si tomo el ejemplo de su pregunta, puede establecer el href del enlace en la página maestra desde su control de usuario o página con la siguiente modificación de su código:

Introduzca el enlace como "contenido normal" en la página maestra y asígnele una identificación para que pueda acceder a ella desde el código subyacente.

<link id="link" type="text/css" rel="stylesheet" />

Agregue una propiedad a la página maestra que establece el href.

public string LinksHref { get { return link.Href; } set { link.Href = value; } }

Si desea acceder a esto desde una página, puede agregar una directiva MasterType.

<%@ MasterType VirtualPath="~/Site.Master" %>

Cambie la propiedad en el código de control detrás.

Master.LinksHref = "/Shared/Css/Navigation.css";

Si desea acceder a esto desde un control de usuario, no puede usar la directiva MasterType y tiene que hacer el casting usted mismo:

((MasterPageClassName)Page.master).LinksHref= "/Shared/Css/Navigation.css";