asp.net master-pages code-behind

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";