【发布时间】:2016-10-07 23:57:22
【问题描述】:
使用问题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">
这解释了为什么我看到“on”而不是所选项目的实际值。我无法在不验证它不会破坏其他内容的情况下将兼容性从 web.config 中删除,但似乎如果该设置可以安全删除,则可以从代码隐藏中访问复选框列表值。
【问题讨论】:
-
你是说当你设置
ViewStateMode="Enabled"然后得到CheckListBox的项目的检查状态工作正常吗? -
我是说 View State 被禁用,所以我必须使用 Request.Form。如果启用了视图状态,我只会从控件的视图状态中获取所选项目,例如 this
-
"On" 是
DataValueField用于CheckBoxList中的所有项目? -
很抱歉提出这个问题:为什么不为该列表启用 ViewState?
-
@ConnorsFan - 有多种原因。一个是远程用户在尝试与视图状态臃肿的表单交互时面临的性能问题。
标签: c# asp.net checkboxlist