为什么我的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
}
如果pageLoad的(),我设置列表视图的.DataSource属性后立即调用.DataBind()。上面的评论是什么意思“//将数据绑定到列表”? – DenaliHardtail 2012-03-09 16:56:00
//将数据绑定到列表正是您在设置DataSource属性然后调用DataBind时所做的。简单地把这两行放在'if(!IsPostBack)'语句中,我把它放在我的回答中 – Icarus 2012-03-09 17:05:05
@Icarus的意思是你将listview绑定到你的数据源,即使它是回发,因此不管你检查了什么,listview从数据源中为您的回传重新填充。因此,如果您使用“if(!IsPostBack)”,它将保留视图状态,并获得您的检查状态 – Kash 2012-03-09 17:07:56