Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

All controls are null within usercontrol

Tags:

I have a UserControl which uses a UserControl, among other controls.

In the ascx file I have the following code:

<%@ Register TagPrefix="tag" Namespace="some.name.space" Assembly="some.assembly" %> <tag:control ID="test" runat="server" /> 

In my Page_Load method, I try to set a property on test like so:

test.Text = "Hello World!"; 

This actually sets the Text property of a literal control in my user control test.

This throws an exception:

Object reference not set to an instance of an object

When it tries to set the

lblTest.Text = value;  

The object that is null is lblTest.

Am I not adding the user control correctly? Should I - or do I have to - specify the Src property when registering a Tag? If so, I'd have to register every usercontrol I use?

This also results in no controls loading in usercontrol and all controls are null within usercontrol.

like image 482
VFein Avatar asked Nov 16 '11 23:11

VFein


2 Answers

If the user control is in your current project, then you need to include the src in the register statement:

<%@ Register TagPrefix="uc1" TagName="NavTop" Src="controls/NavTop.ascx" %> 

However, if you use this user control in more than one page, then you can also register it in web.config:

<system.web>   <pages>     <controls>       <add tagPrefix="uc1" tagName="NavTop" src="~/controls/NavTop.ascx" />     </controls>   </pages> </system.web> 

One other thing to be aware of: there are times when the visual studio designer does not "see" your changes to controls on the page if you only make the changes in source view. If you change a control name, for example, you could end up with a control with the new name in the ascx but a reference to a control with the old name in the designer file. At runtime, this will result in the designer file property being null.

After having been burnt by this a number of times, if I make any changes in source view, I either check to see that the designer file has been updated correctly or I switch to design view, make a minor change, then save the page/user control.

like image 144
competent_tech Avatar answered Nov 11 '22 09:11

competent_tech


I had this problem when I was adding a user control in the code behind the wrong way. You have to use the Page.LoadControl method to initialize the control you can't just use new.

        //WRONG         UserControls.BingoCardPage bcp = new UserControls.BingoCardPage();         form1.Controls.Add(bcp);         //RIGHT         UserControls.BingoCardPage bcp = (UserControls.BingoCardPage)Page.LoadControl("~/UserControls/BingoCardPage.ascx");         form1.Controls.Add(bcp); 
like image 27
ascriven Avatar answered Nov 11 '22 10:11

ascriven