2011-12-02 62 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