如何从内容页面访问主页面控件
我有一个包含状态消息标签的母版页。 我需要从不同的.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”)