为什么我的ASP.NET复选框始终为false?

问题描述:

我正在研究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状态?

也许,当你绑定在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