ASP.NET UserControl - 空引用?

4

我有一个用户控件的问题。它里面包含一个复选框控件。我想要动态创建这个用户控件并将其插入到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";
    }

并且,仍然没有任何显示。

你是在页面的哪个方法中执行这段代码的?创建pp后,也尝试为其设置一个ID。 - Davide Piras
你是否遇到了异常? - atoMerz
检查生成的HTML代码,看复选框是否真正添加到表格中。 - Rahul
2个回答

0

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

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


0

如果您的用户控件根据 ASP.net 页面生命周期 创建良好,则此代码应该可以正常工作。

如果您正在动态添加复选框,请在用户控件的 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接