1- Using FindControl (this.Master.FindControl("usercontrolid"))
2- Using this.Master.YourProperty
The first one is not type safe so you could misspelled a property name then you will get null so this approach is error porn. Furthermore, the control should be cast to a valid control. Also you cannot access property by this approach but you can access to controls in masterpage. However, it does not need any other effort.
The second one is type safe, access to masterpage properties is possible and there is no need for casting. However, it needs that the control be defined at least internal and you need define the master type in your page. Then compiler can detect that master page property and it allows you to access to those property through intelisence.
Let's see an example: we have a Label and image in our masterpage and we have some methods in our master page. We need to call these methods from page that is using these masterpage. Also we have a property in master page that we need to have access in our page. Take a look at this:
This is the master page html code:
This master page properties and methods
public Label TitleLable { get { return LabelTitle; } } public void ShowImage() { Image1.Visible = true; } public void HideImage() { Image1.Visible = false; } |
Then we create a page that is using this masterpage. And this is the html code:
Important: in this code we defined a mastertype directive to notify compiler that we are using these masterpages then if you compile and try to access masterpage methods and properties you can see them.
Take a look to the code behind of the page. As you see we implemented both way. I highly recommend the second way. Remember the first way does not force you to define mastertype in the page. While, second way need the mastertype directive in html code of the page:
protected void ButtonChangeTitle_Click(object sender, EventArgs e) { //first way //Label lbl = Master.FindControl("LabelTitle") as Label; //lbl.Text = "New Title is Assigned";
//second way Master.TitleLable.Text = "New Title is Assigned"; } protected void ButtonHideImage_Click(object sender, EventArgs e) { //first way //Image img = Master.FindControl("Image1") as Image; //img.Visible = false;
//second way Master.HideImage(); } protected void ButtonShowImage_Click(object sender, EventArgs e) { //first way //Image img = Master.FindControl("Image1") as Image; //img.Visible = true;
//second way Master.ShowImage(); } |
As I said before I highly recommend the second way. Let's review the steps:
1- Create a master page
2- Define some public properties and methods in masterpage
3- Create a page using the master page
4- Define the mastertype directive in page
4 comments:
Extremely help full, solved my problem I had for days..
thanks very much indeed.
Thanks for the help. Good post!
Chris
Thanks a lot.
You've saved me!!!
Leandro Nuñez from Argentina.
Thanx Dude.
That Code Really Helped Me a Lot
Post a Comment