All controls are null within usercontrol

后端 未结 4 2227
醉酒成梦
醉酒成梦 2021-02-18 13:27

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

In the ascx file I have the following code:

<%@ Register TagPrefix=         


        
相关标签:
4条回答
  • 2021-02-18 14:04

    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.

    0 讨论(0)
  • 2021-02-18 14:11

    Please try to put code in Page_prerender event of page. It will work for you.

    0 讨论(0)
  • 2021-02-18 14:22

    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);
    
    0 讨论(0)
  • 2021-02-18 14:28

    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:

    //Page
    protected void Page_Load(object sender, EventArgs e)
    {
        test.Text = "Hello World!";
    }
    
    //User Control
    public string Text {get; set;}
    
    protected void Page_Load(object sender, EventArgs e)
    {
        lblTest.Text = Text;
    }
    
    0 讨论(0)
提交回复
热议问题