ASP.NET UserControl - null引用?

时间:2011-12-02 09:33:20

标签: asp.net user-controls

我的用户控件有问题。在里面,我有一个复选框控件。我想动态创建该用户控件并将其插入到asp:table控件中。

        MyControl pp = new MyControl();

        pp.pageNameCb.Text = "lorem";

        TableCell tc = new TableCell();
        tc.Controls.Add(pp);
        table.Rows[0].Cells.Add(tc);

但是,pageNameCb为空,即使我手动创建它的实例,我的表中也没有显示任何内容。为什么?

这是我的代码:

   <asp:View ID="new_role_view" runat="server">
        <asp:Table ID="table1" runat="server">
           <asp:TableRow ID="TableRow1" runat="server">
              <asp:TableCell ID="TableCell1" runat="server">

              </asp:TableCell>
           </asp:TableRow>
        </asp:Table>
    </asp:View>

然后,如果我改变该视图是活动的,我创建我的控件:

        MyControl pp = new MyControl();
        table.Rows[0].Cells[0].Controls.Add(pp);

MyControl的Page_Init:

    protected void Page_Init(object sender, EventArgs e)
    {
        if (pageNameCb == null)
            pageNameCb = new CheckBox();
        pageNameCb.Text = "works";
    }

仍然没有显示

2 个答案:

答案 0 :(得分:0)

当您创建用户控件时,您是否同时实例化该复选框?除非在某个时刻创建了复选框,否则它将为null。如果它是一个自定义控件,你将在Control.CreateChildControls中创建 - 因为它是构造函数中的用户控件或自定义方法 - Init()或某些。

此外,我将在Page_Init上创建用户控件,然后添加到控件树,否则它将不会参与页面的ViewState。

答案 1 :(得分:0)

如果根据ASP.net Page Cycle很好地创建了用户控件,那么这个代码应该可以正常工作。

如果要动态添加该复选框,请在User Control的Page_Init()事件上初始化复选框。并为您的控件提供一些ID

 private Table CreateHtmlTable()
        {
            Table table = new Table();
            table.Rows.Add(new TableRow());          

            TableCell tc = new TableCell();
            MyControl pp = new MyControl();
            pp.ID = "SomeID";
            pp.pageNameCb.Text = "lorem";
            tc.Controls.Add(pp);
            table.Rows[0].Cells.Add(tc);

            return table;
        }

这是适合我的代码...

ASPxLabel lbl = new ASPxLabel();
lbl.ID = "lblTopicName";
lbl.Text = "TopicName";
table.Rows[0].Cells[0].Controls.Add(lbl);