如何从内容页面访问主页面控件

我有一个包含状态消息标签的母版页。 我需要从不同的.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文件中添加Labelproperty ,如下所示:

 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; 

因为你不能在一个字段中使用thisMaster 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 LinkBut​​ton = ct.FindControl(“lbtnSave”)

Interesting Posts