CheckBoxList'.Selected'在每种情况下都返回false

时间:2013-04-04 01:01:42

标签: asp.net checkboxlist

我正在尝试从复选框列表中获取多个值并将它们添加到列表中,但即使列表包含适当的计数值,选中的值也始终为false。

填充代码:

Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
HelpingOthersEntities helpData = new HelpingOthersEntities();
List<LookupStoreLocationsByUserName> theDataSet = helpData.LookupStoreLocationsByUserName(userGuid).ToList<LookupStoreLocationsByUserName>();
locCkBox.DataSource = theDataSet;
locCkBox.DataTextField = "slAddress";
locCkBox.DataValueField = "storeLocationID";
locCkBox.DataBind();

添加到列表的代码:

List<int> locList = new List<int>();

for (int x = 0; x < locCkBox.Items.Count; x++){
   if(locCkBox.Items[x].Selected){
        locList.Add(int.Parse(locCkBox.Items[x].Value));
    }
}

我遇到的问题是我无法进入items.selected  我的价值总是假的。

我已尝试从回发中填充复选框,但我得到相同的结果。我的列表为我提供了适当的.Count数量的值,但是items.selected = false?

我已尝试将foreach循环添加到列表中,但我反复得到相同的结果。我错过了什么活动吗?

2 个答案:

答案 0 :(得分:10)

我将在这里猜测并说你的代码在页面加载事件中被调用,所以你有类似下面的内容。

private void Page_Load()
{
    Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
    HelpingOthersEntities helpData = new HelpingOthersEntities();
    List<LookupStoreLocationsByUserName> theDataSet = helpData.LookupStoreLocationsByUserName(userGuid).ToList<LookupStoreLocationsByUserName>();
    locCkBox.DataSource = theDataSet;
    locCkBox.DataTextField = "slAddress";
    locCkBox.DataValueField = "storeLocationID";
    locCkBox.DataBind();
}

如果是这种情况,那么您有效地在每个请求上写回发回数据。要对此进行排序,您只需要在不是回发时执行数据绑定,因此您需要将上面的代码更改为

private void Page_Load()
{
    if (!IsPostBack)
    {
        Guid userGuid = (Guid)Membership.GetUser().ProviderUserKey;
        HelpingOthersEntities helpData = new HelpingOthersEntities();
        List<LookupStoreLocationsByUserName> theDataSet = helpData.LookupStoreLocationsByUserName(userGuid).ToList<LookupStoreLocationsByUserName>();
        locCkBox.DataSource = theDataSet;
        locCkBox.DataTextField = "slAddress";
        locCkBox.DataValueField = "storeLocationID";
        locCkBox.DataBind();
    }
}

然后,您应该能够测试项目的Selected属性。我也可能会更改你用来测试所选代码的代码

List<int> locList = new List<int>();
foreach(var item in locCkBox.Items)
{
  if(item.Selected)
  {
    locList.Add(int.Parse(item.Value));
  }
}

或者如果您的.NET版本可以使用LINQ

List<int> locList = new List<int>();
(from item in locCkBox.Items where item.Selected == true select item).ForEach(i => locList.Add(i.Value));

答案 1 :(得分:2)

确保在页面加载中绑定checkboxlist时,您已设置此检查。

if (!Page.IsPostBack)
{
...bind your data
}

这应该可以解决问题。