2009-07-07 42 views

Respuesta

18

La manera más fácil es configurar una propiedad en su página maestra que maneja la función de encendido/apagado cuando es llamado. Luego, en la página de su hijo configure el MasterType directive para obtener una referencia fuertemente tipada a su página maestra para evitar la necesidad de lanzar.

Su página niño tendría:

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

Y para llamar a la propiedad de la página maestra:

Master.MyLabel = false; // or true 

Así que en su maestro que podría tener:

public bool MyLabel 
{ 
    get 
    { 
     return masterLabel.Enabled; 
    } 
    set 
    { 
     masterLabel.Enabled = value; 
    } 
} 
+0

Marks anser me puso en marcha, pero esta es la respuesta de cómo pude implementarlo. Gracias Ahmad. – Lloyd

+0

Bueno. Una cosa que puede hacer es ir a su archivo .designer.cs y cambiar el alcance del control a público, luego tiene todas las propiedades para entregar su lógica de página. Además, si está exponiendo una propiedad pública, generalmente es mejor utilizar CamelCase, pascalCase es para campos privados. :) –

+0

@Mark: ¡buena información! Estoy de acuerdo con el CamelCase, me lo perdí. Corregido ahora. –

3

Aquí hay un ejemplo de cómo comunicarse con las páginas maestras de las páginas secundarias.

En la página principal, crear una propiedad para el control al que desea acceder, por ejemplo una etiqueta llamada lblUser ...

public string MyProperty 
     { 
     set { lblUser.Text = value; } 
     } 

En la página niño, acceso a la propiedad que acaba de crear, como en el siguiente ejemplo ...

((MyMaster)this.Master).MyProperty = "Text changed from Sub Page"; 

somos capaces de hacer esto porque el Maestro no es más que una clase que hereda System.Web.UI.MasterPage.

Y la propiedad Label.Text que creamos es solo una propiedad de la clase Master (este nombre será el nombre específico de su página maestra actual, en este caso MyMaster).

Observe que no funcionará sin un molde para su clase de página maestra específica y esto se debe a que ha agregado un campo que no existe en System.Web.UI.MasterPage, el tipo de este.Máster, pero en su Clase maestra específica.

+0

+1 a esto! Igual que mi solución, ¡solo que más elegante! – GenericTypeTea

+0

Simple y útil. Gracias y merecido un punto. – QMaster

-1
this.Master.FindControl("controlid").dosomethinghere 
+1

-1 nombres de control de codificación rígida como cadenas es MALO – GenericTypeTea

+0

@GenericTypeTea Eso es lo que hacen en la [documentación] (https://msdn.microsoft.com/en-us/library/xxwa0ff0 (v = vs.140) .aspx) aunque – Zorgarath

10

Es necesario utilizar una directiva MasterType en su página de marcado

<%@ MasterType TypeName="Namespace.Etc.MyMasterPage" %> 

Entonces usted será capaz de acceder a los bienes de dominio público de la página principal de la página utilizando

this.Master.PropertyIWantToIntefereWith... 

Esperanza esta ayuda

+0

he estado haciendo eso a través del lanzamiento del objeto de página ... ¡esto suena mucho mejor! ¡Gracias! – CodeRedick

+0

No estaba claro para mí dónde determinar el valor de TypeName, así que usé la opción VirtualPath para el MasterType y funcionó muy bien. ¡Gracias! – Lloyd

+0

¡Nunca hay algo nuevo! Gracias Mark +1! – GenericTypeTea

0

I estaba buscando algo similar, pero esta solución no parece funcionar para mí. Tengo una página maestra anidada. ¿Funciona esto para un maestro anidado? Cuando lo implementé, no reconoce el control que agregué a mi maestro.

Cuestiones relacionadas