views:

1395

answers:

2

Is there a difference between these two scenarios:

(1) Accessing a property on a master page from a regular child

(2) Accessing a property on a master page from a nested master page

I tried to access a textbox in the master page from a content page like this:

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
defaultTextbox.Text = a.Text; // defaultTextBox is a textbox control inside default.aspx

it works, but then when I applied the same method on a nested master page:

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
myTextBox.Text = a.Text; // myTextBox is a textbox control inside child.master

this does not work, am I missing something? I call both codes inside regulare page_load handler...

I also noticed I cannot set textbox value inside the nested master page from code behind, there is definitely something im missing, what is it? To shed light on this issue, here is an example:

Nested Master Page:

<%@ Master Language="C#" MasterPageFile="MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage2.master.cs" Inherits="MasterPage2" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:textbox id="tx2" runat="server" text="this is two"></asp:textbox>
<asp:contentplaceholder id="newstuff" runat="server"></asp:contentplaceholder>
</asp:Content>

Code behind:

Response.Wrote(tx2.Text);

I get NOTHING, why what did I miss? note that I also tried the recursive find control:

String str = ((TextBox)((Content)FindControl("Content2")).FindControl("tx2")).Text;

still nothing

A: 

This should work without any problems, so something else must be wrong. I just tried it inside a simple test project and I have no problems finding a control on the master page in both cases.

I would check (again) if you refer to the correct master page inside your nested master page. What you could also check is the runtime type of the Master property inside your nested master page. It should be the type of your master page.

EDIT: I thought the issue was about finding a control in the root master page from a nested master page and this should work without any problems. For finding a control inside a content placeholder in a nested master page, take a look at the following forum post.

Ronald Wildenberg
i just created a new project from scratch, i still get the same results! i can't access anything on the middle nested page
Ayyash
I thought your question was about accessing properties on the root master page from both a nested master page and a content page. I´ll try and see if I can get the otrher snenario to work: accessing a property on a nested master page from a content page.
Ronald Wildenberg
+2  A: 

I read few things here: http://www.odetocode.com/Articles/450.aspx and found out that the nested page in the middle never calls Page_Load! instead, it fires a load event that you can catch to set whatever fields, so the answer was in: on nested page do the following:

protected override void OnLoad(EventArgs e)
    {
        myTextBox.Text = "anything";
        base.OnLoad(e);
    }
Ayyash
If the nested master page does not call Page_Load, something else is wrong as well because all Page_Load methods should be called (on the master page, the nested master page and the content page). I added some more info to my original answer.
Ronald Wildenberg