All controls are null within usercontrol All controls are null within usercontrol asp.net asp.net

All controls are null within usercontrol


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.


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);


The issue here is usually due the the load mechanics of user controls, they load after the page typically. So as a result the controls have not yet been initialized on your usercontrol (causing the null ref) during the containing page_load method. One way to work around this is to just create and set a property on the usercontrol and have the usercontrol wire-up/populate its own UI in its Page_Load method.

Something like this:

//Pageprotected void Page_Load(object sender, EventArgs e){    test.Text = "Hello World!";}//User Controlpublic string Text {get; set;}protected void Page_Load(object sender, EventArgs e){    lblTest.Text = Text;}