2012-03-09 38 views
1

我正在研究ASP.NET Web窗體應用程序。我有一個四列的列表視圖,綁定到pageload()上的數據源,填充了聯繫人姓名。其中一列包含一個複選框。用戶選擇一個複選框以指示相應的聯繫人應在下一步中處理。爲什麼我的ASP.NET複選框始終爲false?

該表單還包含一個按鈕。單擊此按鈕時,將運行以下代碼以處理選定的聯繫人。

foreach (var x in lvPeople.Items) 
{ 
    chkSelected = (CheckBox)x.FindControl("IsLetterRecipient"); 

    if (chkSelected.Checked) 
    { 
     // the person was selected by the user, do stuff here... 
    } 
} 

當我設置上包含IF語句行斷點,斷點被(在列表視圖== 7個複選框,每行一次)打了七次。但是,IF塊內部的代碼永遠不會運行,因爲.Checked總是False,而不管複選框是否被實際檢查。

複選框上的AutoPostBack設置爲False。複選框和列表視圖上的EnableViewState設置爲True。

我在做什麼錯?如何獲得複選框的.Checked狀態?

回答

4

也許,當你綁定在Page_Load中的數據,你忘了做:

if(!IsPostBack) 
{ 
    //bind the data to the list 
} 
+0

如果pageLoad的(),我設置列表視圖的.DataSource屬性後立即調用.DataBind()。上面的評論是什麼意思「//將數據綁定到列表」? – DenaliHardtail 2012-03-09 16:56:00

+0

//將數據綁定到列表正是您在設置DataSource屬性然後調用DataBind時所做的。簡單地把這兩行放在'if(!IsPostBack)'語句中,我把它放在我的回答中 – Icarus 2012-03-09 17:05:05

+0

@Icarus的意思是你將listview綁定到你的數據源,即使它是回發,因此不管你檢查了什麼,listview從數據源中爲您的回傳重新填充。因此,如果您使用「if(!IsPostBack)」,它將保留視圖狀態,並獲得您的檢查狀態 – Kash 2012-03-09 17:07:56