Programmatically adding a user control and setting values

A

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
 
G

grava

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
 
A

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?
 
G

grava

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
 
A

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/micr...=user+control+null+exception#843f908c1cae7af0

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/2...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 ;)
 
M

Milosz Skalecki [MCAD]

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top