使用问题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”。我需要能够通过索引或其他方法来确定哪个项目处于“启用”状态。
问题:如何使用
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呈现方式:
@Leopard指出,他看到了HTML呈现的值,这种情况在我的情况下不会发生。 AdamE对this question的回答说明了原因。我在web.config中有以下一行:
<pages validateRequest="false" controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
这就解释了为什么我看到“on”而不是所选项目的实际值。我不能仅仅从web.config中取消兼容性,而不验证它是否不会破坏其他功能,但是看来,如果可以安全删除该设置,则可以从隐藏的代码中访问复选框列表值。
最佳答案
当您将checkboxList
中的Database
与OptionId
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/