如何从内容页面访问主页面控件
我有一个包含状态消息标签的母版页。 我需要从不同的.aspx页面设置状态文本。 这怎么可以从内容页面完成?
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) { } } 我已经尝试过了,但是却没有成功:
 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!"); } } } } } 
	
 在MasterPage.cs文件中添加Label的property ,如下所示: 
 public string ErrorMessage { get { return lblMessage.Text; } set { lblMessage.Text = value; } } 
 在你的aspx页面上,在页面指令的下面添加: 
 <%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %> <%@ MasterType VirtualPath="Master Path Name" %> // Add this 
 然后在你的代码codebehind(aspx.cs)页面中,你可以很容易地访问Label Property并根据需要设置其text 。 喜欢这个: 
 this.Master.ErrorMessage = "Your Error Message here"; 
在“内容”页面中,您可以访问标签并设置文本
这里'lblStatus'是你的主页面标签ID
标签lblMasterStatus =(标签)Master.FindControl(“lblStatus”); lblMasterStatus.Text =“从内容页面的Meaasage”;
有用
在子页面上查找母版页控件
 Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label; lbl_UserName.Text = txtUsr.Text; 
 你不能在字段中使用var ,只能在局部variables中使用。 
但即使这样也行不通:
 Site master = Master as Site; 
 因为你不能在一个字段中使用this , Master as Site和这个一样this.Master as Site 。 所以当页面完全初始化的时候,只需从Page_Init初始化这个字段,你可以这样使用: 
 Site master = null; protected void Page_Init(object sender, EventArgs e) { master = this.Master as Site; } 
我在我的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; } 
那么你可以使用下面的代码访问。
 Label lblStatus = FindControlFromMaster<Label>("lblStatus"); if(lblStatus!=null) lblStatus.Text = "something"; 
如果你有一个嵌套的MasterPage,这将更加复杂。 您需要首先find包含嵌套MasterPage的内容控件,然后从中find嵌套MasterPage上的控件。
关键点: Master.Master 。
看到这里: http : //forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl
例:
“find内容控制
Dim ct As ContentPlaceHolder = Me.Master.Master.FindControl(“cphMain”)
'现在find内容中的控件
Dim lbtnSave As LinkButton = ct.FindControl(“lbtnSave”)