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”.
我需要能够通过索引或其他方法确定哪个项目“打开”.
问题:如何使用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呈现方式:
@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