2011-12-02 33 views
4

我的用户控件有问题。在里面,我有一个复选框控件。我想立即创建该用户控件并将其插入到asp:table控件中。ASP.NET用户控件 - 空引用?

 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"; 
    } 

,仍然,什么也没有显示

+0

你执行这个代码?尝试在创建后设置pp的ID。 –

+0

您是否遇到异常? – atoMerz

+0

检查生成的HTML并查看表格中是否真的添加了复选框 – Rahul

回答

0

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

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

0

如果您的用户控件是根据ASP.net Page Cycle创建的,那么这是应该正常工作的代码。

如果要动态添加该复选框,请初始化用户控件的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); 
+0

我编辑了我的问题,请检查它 – Tony