16

I have to find a Control in an aspx page bound to a master page.

The master page contains:

<asp:ContentPlaceHolder ID="MainContent" runat="server"/>               

The content page contains:

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
</asp:Content>

I added a Table with ID formtable as a child of Content2.

I tried to use the following code to access the Table, but the code returns null:

protected void Ok_Click(object sender, EventArgs e)
{
    Table tblForm = this.FindControl("MainContent").FindControl("formtable") as Table;                 
}

How can I access the Table?

Ryan Prechel
  • 6,012
  • 4
  • 20
  • 21
Aladdin Gallas
  • 671
  • 2
  • 11
  • 34

3 Answers3

32

Try this

Table tblForm = this.Master.FindControl("MainContent").FindControl("formtable") as Table; 

Checkout this Control ID Naming in Content Pages for more details

MikeSmithDev
  • 15,236
  • 4
  • 54
  • 85
Vinay B R
  • 7,227
  • 2
  • 24
  • 44
1

Working with findControl() cause complications sometimes. It is easier to define a public property for that control in master page and then access control through the property.

you should add this line in child page:

<%@ MasterType VirtualPath="~/MasterPage.master" %>
Babak
  • 179
  • 1
  • 6
0

What context are you in when you are trying to do this? Are you in the codebehind of the individual page?

If you are it should be Content1.FindControl("formtable") as Table and that would be it.

Mitchel Sellers
  • 58,921
  • 13
  • 103
  • 170