Programmatically adding a user control and setting values

Programmatically adding a user control and setting values

am 17.01.2008 11:40:38 von alun65

I'm having trouble programmatically adding a user control and then
setting some of it's server controls.

I add the user control to the code behind and add it to a placeholder:

protected void Page_Load(object sender, EventArgs e)
{
UserControls_WebUserControl myControl = new
UserControls_WebUserControl();
PlaceHolder1.Controls.Add(web);
}

And I make a reference to it on the webpage:

<%@ Register Src="~/UserControls/WebUserControl.ascx"
TagName="myUserControl" TagPrefix="CustomControl" %>

All good so far?

For the user contorl, to simplify it the the Page_Load of the user
control is trying to set a hyperlink text (as later on a will
hopefully pass a load of values to a constructor of the user control)
like so:

HyperLink1.Text = "Hi I'm a hyperlink";

I'm expecting the obvious (well obvious to me anyways). For one
hyperlink with the text "Hi I'm a hyperlink".

instead when I run this I get the error:

Exception Details: System.NullReferenceException: Object reference not
set to an instance of an object.

When debugging the hyperlink I've placed on the user control doesn't
seem to exist! Could any kind programmer tell this noobie what he's
doing wrong. Thanks in advance.

Alun

Re: Programmatically adding a user control and setting values

am 17.01.2008 11:48:29 von grava

wrote in message
news:f58bafe6-2db6-4010-b175-f4a81224bf22@v17g2000hsa.google groups.com...
> I'm having trouble programmatically adding a user control and then
> setting some of it's server controls.
>
> I add the user control to the code behind and add it to a placeholder:
>
> protected void Page_Load(object sender, EventArgs e)
> {
> UserControls_WebUserControl myControl = new
> UserControls_WebUserControl();
> PlaceHolder1.Controls.Add(web);
> }
>
> And I make a reference to it on the webpage:
>
> <%@ Register Src="~/UserControls/WebUserControl.ascx"
> TagName="myUserControl" TagPrefix="CustomControl" %>
>
> All good so far?
>
> For the user contorl, to simplify it the the Page_Load of the user
> control is trying to set a hyperlink text (as later on a will
> hopefully pass a load of values to a constructor of the user control)
> like so:
>
> HyperLink1.Text = "Hi I'm a hyperlink";
>
> I'm expecting the obvious (well obvious to me anyways). For one
> hyperlink with the text "Hi I'm a hyperlink".
>
> instead when I run this I get the error:
>
> Exception Details: System.NullReferenceException: Object reference not
> set to an instance of an object.
>
> When debugging the hyperlink I've placed on the user control doesn't
> seem to exist! Could any kind programmer tell this noobie what he's
> doing wrong. Thanks in advance.
>
> Alun

Where is HyperLink1 Control ??? In the page or in the UserControl ???

Try with FindControl within the scope of the container of the Hyperlink
(page or control).

HTH


--
Gianluca Gravina
http://blogs.ugidotnet.org/thinkingingrava

Re: Programmatically adding a user control and setting values

am 17.01.2008 12:42:34 von alun65

The server contorl HyperLink1 is on the user control .ascx page.

Thanks for the suggestion Gianluca. In the user contorl codebehind I
tried your suggestion out:

protected void Page_Load(object sender, EventArgs e)
{
((HyperLink)(FindControl("HyperLink1"))).Text = "I am the
hyperlink";
}

But I still get a System.NullReferenceException for the hyperlink. Any
other ideas?

Re: Programmatically adding a user control and setting values

am 17.01.2008 13:08:37 von grava

wrote in message
news:b57ac55c-5adb-4111-bc49-8493f7cf19e5@u10g2000prn.google groups.com...
> The server contorl HyperLink1 is on the user control .ascx page.
>
> Thanks for the suggestion Gianluca. In the user contorl codebehind I
> tried your suggestion out:
>
> protected void Page_Load(object sender, EventArgs e)
> {
> ((HyperLink)(FindControl("HyperLink1"))).Text = "I am the
> hyperlink";
> }
>
> But I still get a System.NullReferenceException for the hyperlink. Any
> other ideas?
>


Here is a working sample.

Code in the page Code Behind:

private Control c;

protected void Page_Init(object sender, EventArgs e)
{
c = LoadControl("WebUserControl1.ascx");
plcHolder.Controls.Add(c);
}

protected void Page_Load(object sender, EventArgs e)
{
WebUserControl1 wc = (WebUserControl1) c;
((TextBox) wc.FindControl("controlTextBox")).Text = "Test";
}

In the ascx there's a textbox with id="controlTextBox".

HTH


--
Gianluca Gravina
http://blogs.ugidotnet.org/thinkingingrava

Re: Programmatically adding a user control and setting values

am 17.01.2008 13:21:39 von Kevin Spencer

This sort of thing requires a familiarity with the ASP.Net Control Execution
LifeCycle, as the Page (which is a Control) and all the Controls in it, host
other Controls, and there is a cascade of events which occurs when the class
is loaded. See the following:

http://www.digcode.com/default.aspx?page=ed51cde3-d979-4daf- afae-fa6192562ea9&article=d3ba7954-6235-446f-9801-584539cbb6 bf

--
HTH,

Kevin Spencer
Chicken Salad Surgeon
Microsoft MVP

wrote in message
news:f58bafe6-2db6-4010-b175-f4a81224bf22@v17g2000hsa.google groups.com...
> I'm having trouble programmatically adding a user control and then
> setting some of it's server controls.
>
> I add the user control to the code behind and add it to a placeholder:
>
> protected void Page_Load(object sender, EventArgs e)
> {
> UserControls_WebUserControl myControl = new
> UserControls_WebUserControl();
> PlaceHolder1.Controls.Add(web);
> }
>
> And I make a reference to it on the webpage:
>
> <%@ Register Src="~/UserControls/WebUserControl.ascx"
> TagName="myUserControl" TagPrefix="CustomControl" %>
>
> All good so far?
>
> For the user contorl, to simplify it the the Page_Load of the user
> control is trying to set a hyperlink text (as later on a will
> hopefully pass a load of values to a constructor of the user control)
> like so:
>
> HyperLink1.Text = "Hi I'm a hyperlink";
>
> I'm expecting the obvious (well obvious to me anyways). For one
> hyperlink with the text "Hi I'm a hyperlink".
>
> instead when I run this I get the error:
>
> Exception Details: System.NullReferenceException: Object reference not
> set to an instance of an object.
>
> When debugging the hyperlink I've placed on the user control doesn't
> seem to exist! Could any kind programmer tell this noobie what he's
> doing wrong. Thanks in advance.
>
> Alun

Re: Programmatically adding a user control and setting values

am 17.01.2008 14:08:12 von alun65

Thanks for the working code.

From that I was able to figure out what I was doing wrong. I was
trying to instantate the user contorl like a server control like:

UserControls_WebUserControl myControl = new
UserControls_WebUserControl();

where as like you have done, I should have been using the
LoadControl() method.

I stumbled accross this posting that confirmed the different
instanition methods:

http://groups.google.com/group/microsoft.public.dotnet.frame work.aspnet/browse_thread/thread/1840137aa1ccb31f/843f908c1c ae7af0?lnk=gst&q=user+control+null+exception#843f908c1cae7af 0

Just as a side note for anyone interested in passing parameters to a
user control constructor, there's a great article here that sorts it
out:

http://blah.winsmarts.com/2006/05/20/loadcontrol-a-usercontr ol--and-pass-in-constructor-parameters.aspx?postID=12

Thanks grava for your help. My problems are now solved! At least for
the next hour or so ;)

RE: Programmatically adding a user control and setting values

am 18.01.2008 00:19:00 von mily242

Howdy,

Exception you get is because UserControl are treated differently (you can't
use constructor to instantiate), use LoadControl method instead (then, all
references to your controls within usercontrol will be properly intantiated):

UserControls_WebUserControl myControl =
(UserControls_WebUserControl)
this.LoadControl("~/UserControls/WebUserControl.ascx")
PlaceHolder1.Controls.Add(myControl);

In addition move the code to Page_Init event because the view state.

Hope this helps
--
Milosz


"alun65@gmail.com" wrote:

> I'm having trouble programmatically adding a user control and then
> setting some of it's server controls.
>
> I add the user control to the code behind and add it to a placeholder:
>
> protected void Page_Load(object sender, EventArgs e)
> {
> UserControls_WebUserControl myControl = new
> UserControls_WebUserControl();
> PlaceHolder1.Controls.Add(web);
> }
>
> And I make a reference to it on the webpage:
>
> <%@ Register Src="~/UserControls/WebUserControl.ascx"
> TagName="myUserControl" TagPrefix="CustomControl" %>
>
> All good so far?
>
> For the user contorl, to simplify it the the Page_Load of the user
> control is trying to set a hyperlink text (as later on a will
> hopefully pass a load of values to a constructor of the user control)
> like so:
>
> HyperLink1.Text = "Hi I'm a hyperlink";
>
> I'm expecting the obvious (well obvious to me anyways). For one
> hyperlink with the text "Hi I'm a hyperlink".
>
> instead when I run this I get the error:
>
> Exception Details: System.NullReferenceException: Object reference not
> set to an instance of an object.
>
> When debugging the hyperlink I've placed on the user control doesn't
> seem to exist! Could any kind programmer tell this noobie what he's
> doing wrong. Thanks in advance.
>
> Alun
>