how to access master page control from content page

匿名 (未验证) 提交于 2019-12-03 01:51:02

问题:

I have a master page which contains a label for status messages. I need to set the status text from different .aspx pages. How can this be done from the content page?

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)     {                  } } 

I have tried this, but was unsuccessful in making it work:

回答1:

In the MasterPage.cs file add the property of Label like this:

public string ErrorMessage {     get     {         return lblMessage.Text;     }     set     {         lblMessage.Text = value;     } } 

On your aspx page, just below the Page Directive add this:

    // Add this 

And in your codebehind(aspx.cs) page you can then easily access the Label Property and set its text as required. Like this:

this.Master.ErrorMessage = "Your Error Message here"; 


回答2:

In Content page you can access the label and set the text such as

Here 'lblStatus' is the your master page label ID

 Label lblMasterStatus = (Label)Master.FindControl("lblStatus");  lblMasterStatus.Text  = "Meaasage from content page"; 


回答3:

It Works

To find master page controls on Child page

Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;                     lbl_UserName.Text = txtUsr.Text; 


回答4:

You cannot use var in a field, only on local variables.

But even this won't work:

Site master = Master as Site; 

Because you cannot use this in a field and Master as Site is the same as this.Master as Site. So just initialize the field from Page_Init when the page is fully initialized and you can use this:

Site master = null;  protected void Page_Init(object sender, EventArgs e) {                 master = this.Master as Site; } 


回答5:

I have a helper method for this in my System.Web.UI.Page class

protected T FindControlFromMaster(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; } 

then you can access using below code.

Label lblStatus = FindControlFromMaster


回答6:

This is more complicated if you have a nested MasterPage. You need to first find the content control that contains the nested MasterPage, and then find the control on your nested MasterPage from that.

Crucial bit: Master.Master.

See here: http://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl

Example:

'Find the content control

Dim ct As ContentPlaceHolder = Me.Master.Master.FindControl("cphMain")

'now find controls inside that content

Dim lbtnSave As LinkButton = ct.FindControl("lbtnSave")



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!