使用问题here中显示的方法,我能够从CheckBoxList中获取所选项目的值:

var selectedCheckBoxItems = from key in Request.Form.AllKeys
                        where key.Contains(cbl.ID)
                        select Request.Form.Get(key);

然后,我可以遍历结果:
foreach (var item in selectedCheckBoxItems)
{

}

问题在于item只是发布值,对于复选框而言,它只是字符串“on”。

c# - 确定使用Request.Form在CheckBoxList中选择了哪些项目-LMLPHP

我需要能够通过索引或其他方法来确定哪个项目处于“启用”状态。

问题:如何使用CheckBoxList确定在Request.Form中选择了哪些项目?

这是我的CheckBoxList定义:
<asp:CheckBoxList runat="server" ID="cblAnimalType" SelectionMode="Multiple" DataTextField="OptionText" DataValueField="OptionId"  AutoPostBack="True"/>

项目从后面的代码添加到列表中:
DataTable dt = GetData(SqlGetListOptions, paramList);
cbl.DataSource = dt;
cbl.DataBind();

要知道的另一个重要事项是ViewStateMode="Disabled",因此我必须使用Request.Form来获取选定的项。

为了回应评论,以下是CheckBoxList的HTML呈现方式:

c# - 确定使用Request.Form在CheckBoxList中选择了哪些项目-LMLPHP

@Leopard指出,他看到了HTML呈现的值,这种情况在我的情况下不会发生。 AdamE对this question的回答说明了原因。我在web.config中有以下一行:
<pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">

这就解释了为什么我看到“on”而不是所选项目的实际值。我不能仅仅从web.config中取消兼容性,而不验证它是否不会破坏其他功能,但是看来,如果可以安全删除该设置,则可以从隐藏的代码中访问复选框列表值。

最佳答案

当您将checkboxList中的DatabaseOptionId feild绑定(bind)时,您可以检查选择了哪些checkboxes并将它们的值存储在List<int>中,假设它们的值是int

然后,再次填充checkboxlist时,您可以检查较早存储的value中存在哪些list,并根据value可以select相关的checkbox

这是一个示例代码

List<int> SelectedCheckBoxes = new List<int>();
var selectedCheckBoxItems = from key in Request.Form.AllKeys
                                    where key.Contains(cblAnimalType.ID)
                                    select Request.Form.Get(key);
foreach (var item in selectedCheckBoxItems)
{
  SelectedCheckBoxes.Add(int.Parse(item.ToString()));
}

然后再次当您对populate进行checkboxlist编码时,您可以通过value查找项目并选择它们
foreach (ListItem listItem in cblAnimalType.Items)
{
  if (SelectedCheckBoxes.Contains((int.Parse(listItem.Value))))
   {
     listItem.Selected = true;
   }
}

您可能需要将SelectedCheckBoxes List存储在session中,具体取决于您如何填充checkboxlist

更新

根据与您的讨论,您使用的是Asp.net 4.0,但您的checkboxes没有应有的value attribute

发生这种情况是因为您正在使用controlRenderingCompatibilityVersion="3.5",因为您已经在使用Asp.Net 4.0,因此不再需要它。

因此,从web.congif中删除此行将解决此问题,您将能够获得value of checkbox,而不仅仅是获得on
<pages controlRenderingCompatibilityVersion="3.5" />

关于c# - 确定使用Request.Form在CheckBoxList中选择了哪些项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37690242/

10-13 03:14