2013-05-18 30 views
0

我試圖做一個簡單的應用程序,其中我有一個下拉列表tems - 數字從1到4.爲什麼chk.Checked ChangedEventHandler沒有觸發,我得到的異常對象引用未設置爲對象的實例

根據用戶選擇的數量 - 我使用綁定的checkedchanged事件動態創建此數量的複選框。因此,當用戶選中某些複選框時,如此checkedchanged事件引發,我將選中的複選框的文本存儲在會話中,然後當我單擊按鈕時,我只想從複選框中看到文本。

但似乎checkedchanged事件處理程序從未觸發。

預先感謝您

public partial class proba : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     dd1.Items.Add("1"); 
     dd1.Items.Add("2"); 
     dd1.Items.Add("3"); 
     dd1.Items.Add("4"); 





    } 

    protected void dd1_SelectedIndexChanged1(object sender, EventArgs e) 
    { 
     int numTourists = Convert.ToInt32(dd1.SelectedItem.Text); 

     for (int i = 0; i < numTourists; i++) 
     { 
      CheckBox chk = new CheckBox(); 
      chk.ID = "chk" + i; 
      chk.Text = "box" + i; 

      chk.CheckedChanged += new EventHandler(checkChanged); 
      Page.FindControl("form1").Controls.Add(chk); 


     } 
    } 

    protected void checkChanged(object sender, EventArgs e) 
    { 
     CheckBox chk = (CheckBox)sender; 

     lblpr.Text += chk.Text; 

     Session["chk"] = chk.Text; 


    } 

    protected void btnpr_Click(object sender, EventArgs e) 

    { 
     lblpr.Text = "length" + ((String [])Session["chk"]).Length; 
     for (int k = 0; k < ((String[])Session["chk"]).Length; k++) 
     { 
      lblpr.Text += ((String [])Session["chk"])[k]; 


     } 
    } 




} 
+0

哪一行,你得到的異常中發現的基本? – Damith

回答

2

您需要設置複選框爲真正的AutoPostBack財產,以回發時檢查改變

chk.AutoPostBack = true; 

而且閱讀這也

adding an event handler to a dynamically created checkbox (aspx, c#)

更改頁面加載,你不要「T需要在每個頁面後回

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     //Load dd1 
    } 
} 

連連添加項目,但你需要在每個頁面職位上的OnInit添加動態控件回來,更好地做到這一點如上面的鏈接答案建議

+0

你能給我舉一個例子說明如何在這個回發事件上重新控制控制,所以從我的理解我應該在eveventhandler函數中重新創建控件 –

2

由於您正在動態創建複選框,因此在發回帖子時它會丟失。 因此,您需要在頁面加載事件之前再次添加這些內容,以便在頁面加載事件期間它們對.net可見,因此.net可以觸發它們的相應事件。你潛入動態控制

B4這是好主意,可在http://www.4guysfromrolla.com/articles/092904-1.aspx

相關問題