asp.net - cómo acceder al control de página maestra desde la página de contenido
master-pages code-behind (6)
En el archivo MasterPage.cs agregue la property
de Label
esta manera:
public string ErrorMessage
{
get
{
return lblMessage.Text;
}
set
{
lblMessage.Text = value;
}
}
En su página aspx
, justo debajo de la Directiva de página agregue esto:
<%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %>
<%@ MasterType VirtualPath="Master Path Name" %> // Add this
Y en su página codebehind(aspx.cs)
puede acceder fácilmente a Label Property
y establecer su text
según sea necesario. Me gusta esto:
this.Master.ErrorMessage = "Your Error Message here";
Tengo una página maestra que contiene una etiqueta para mensajes de estado. Necesito configurar el texto de estado de diferentes páginas .aspx. ¿Cómo se puede hacer esto desde la página de contenido?
public partial class Site : System.Web.UI.MasterPage
{
public string StatusNachricht
{
get
{
return lblStatus.Text;
}
set
{
lblStatus.Text = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Intenté esto, pero no tuve éxito en hacerlo funcionar:
public partial class DatenAendern : System.Web.UI.Page
{
var master = Master as Site;
protected void Page_Load(object sender, EventArgs e)
{
if (master != null)
{
master.setStatusLabel("");
}
}
protected void grdBenutzer_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
//some code
if (master != null)
{
master.setStatusLabel("Passwort erfolgreich geändert.");
}
}
catch (Exception ex)
{
if (master != null)
{
master.setStatusLabel("Passwort konnte nicht geändert werden!");
}
}
}
}
}
En la página de Contenido puede acceder a la etiqueta y configurar el texto como
Aquí ''lblStatus'' es la ID de etiqueta de su página maestra
Label lblMasterStatus = (Label)Master.FindControl("lblStatus"); lblMasterStatus.Text = "Meaasage from content page";
Esto es más complicado si tiene una página maestra anidada. Primero debe encontrar el control de contenido que contiene la página maestra anidada y luego buscar el control en su página principal anidada.
Crucial bit: Master.Master .
Vea aquí: http://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl
Ejemplo:
''Encuentra el control de contenido
Dim ct como ContentPlaceHolder = Me.Master.Master.FindControl ("cphMain")
''ahora encuentra controles dentro de ese contenido
Dim lbtnSave As LinkButton = ct.FindControl ("lbtnSave")
Funciona
Para encontrar controles de página maestra en la página de Child
Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;
lbl_UserName.Text = txtUsr.Text;
No puede usar var
en un campo , solo en variables locales.
Pero incluso esto no funcionará:
Site master = Master as Site;
Porque no puede usar this
en un campo y el Master as Site
es el mismo que este. this.Master as Site
. Así que simplemente inicialice el campo de Page_Init
cuando la página esté completamente inicializada y puede usar this
:
Site master = null;
protected void Page_Init(object sender, EventArgs e)
{
master = this.Master as Site;
}
Tengo un método de ayuda para esto en mi clase System.Web.UI.Page
protected T FindControlFromMaster<T>(string name) where T : Control
{
MasterPage master = this.Master;
while (master != null)
{
T control = master.FindControl(name) as T;
if (control != null)
return control;
master = master.Master;
}
return null;
}
entonces puedes acceder usando el código a continuación.
Label lblStatus = FindControlFromMaster<Label>("lblStatus");
if(lblStatus!=null)
lblStatus.Text = "something";