【问题标题】:CheckBoxList '.Selected' is returning false in every situationCheckBoxList '.Selected' 在每种情况下都返回 false
【发布时间】:2013-04-04 01:01:42
【问题描述】:

我正在尝试从复选框列表中获取多个值并将它们添加到列表中,但即使列表包含适当的计数值,选中的值也始终为 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 循环来添加到列表中,但我一遍又一遍地得到相同的结果。我错过了一个活动还是什么?

【问题讨论】:

    标签: asp.net checkboxlist


    【解决方案1】:

    我将在这里猜测一下,在 pageload 事件中调用了执行填充操作的代码,因此您有如下内容。

    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));
    

    【讨论】:

      【解决方案2】:

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

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

      这应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-02
        • 2018-04-26
        • 1970-01-01
        • 2023-03-10
        • 2019-06-13
        相关资源
        最近更新 更多