Finding Controls in User Control

  • Thread starter Thread starter Fred Chateau
  • Start date Start date
F

Fred Chateau

I am trying to reference a server control in a user control, from the
containing page. Is there a way to do that? I have tried
"UserControl1.FindControl("ControlName")" but I get a null reference.
 
I should mention, in case it makes a difference, that I'm loading the user
control dynamically in Page_Init.
 
UserControl1.FindControl() will search in your user control, try
searching in the page object?
 
Hi Fred,

This is not proper way of solving the problem. It may not work because if
the control is nested within a container control, you have to call
FindControl recursively or use "$" separator when passing the control id to
FindControl method. There's another, much more effective and cleaner way of
doing this type of task, by exposing a property from the user control, which
then can be set or read by the containing page. Let's imagine your user
control has got a text box for extering a user's first name. Containing page
does not know the internal structure of the user control (well it shouldn't
know), therefore it's better to create a property to abstract the First Name:

-- user control --

public string FirstName
{
get
{
return txtFirstName.Text;
}
set
{
txtFirstName.Text = value;
}
}


now, on the containing page set / get the value of the property,
1. declaratively in the aspx code
<uc1:MyCustomControl runat="server" id="myControl" FirstName="Fred"/>
2. or programatically in the code behind:

protected void btn_Click(object sender, EventArgs e)
{
SaveUserDataToDataBase(myControl.FirstName);
}

Hope this helps
 
I still have the same problem. When I load the User Control dynamically, I
can't seem to get a reference to it.

--
Regards,

Fred Chateau
fchateauAtComcastDotNet
 
I figured it out.

PlaceholderControl.Controls[0].FindControl("ControlName")

--
Regards,

Fred Chateau
fchateauAtComcastDotNet
 
Back
Top