编程语言
首页 > 编程语言> > c# – 使用Request.Form确定在CheckBoxList中选择了哪些项目

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

作者:互联网

使用问题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”.

on

我需要能够通过索引或其他方法确定哪个项目“打开”.

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

这是我的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呈现方式:

html

@Leopard指出他看到HTML中呈现的值在我的情况下没有发生. AdamE对this question的回答解释了原因.我在web.config中有以下行:

<pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">

这解释了为什么我看到“开”而不是所选项的实际值.我无法在没有验证它会破坏其他内容的情况下从web.config中提取兼容性,但似乎如果可以安全删除该设置,则可以从代码隐藏中访问复选框列表值.

解决方法:

当您使用OptionId feild绑定Database中的checkboxList时,您可以检查选择了哪些复选框,并将它们的值存储在List< int>中.假设它们的值是int.

然后,当您填充复选框列表时,您可以检查先前存储的列表中存在哪个值,并根据值选择相关复选框.

这是一个示例代码

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

然后,当您填充复选框列表时,您可以按值找到项目并选择它们

foreach (ListItem listItem in cblAnimalType.Items)
{
  if (SelectedCheckBoxes.Contains((int.Parse(listItem.Value))))
   {
     listItem.Selected = true;
   }
}

您可能需要在会话中存储SelectedCheckBoxes列表,具体取决于您填充复选框列表的方式.

更新

根据您的讨论,您使用的是Asp.net 4.0,但您的复选框没有应该存在的值属性.

发生这种情况是因为您使用的是controlRenderingCompatibilityVersion =“3.5”,因为您已经在使用Asp.Net 4.0,所以不再需要它.

因此,从web.congif删除此行将解决问题,您将能够获取复选框的值而不是刚刚开始

<pages controlRenderingCompatibilityVersion="3.5" />

标签:c,asp-net,checkboxlist
来源: https://codeday.me/bug/20190519/1135033.html