我目前遇到一个问题。如何从一个asp.net复选框列表中获取最新选择的值?
通过循环复选框列表中的项目,可以获取最高选择索引及其值,但预计用户不会按顺序从较低索引选择复选框。那么,该如何处理?
是否有任何事件捕获系统可以帮助我识别生成事件的确切列表项?
我目前遇到一个问题。如何从一个asp.net复选框列表中获取最新选择的值?
通过循环复选框列表中的项目,可以获取最高选择索引及其值,但预计用户不会按顺序从较低索引选择复选框。那么,该如何处理?
是否有任何事件捕获系统可以帮助我识别生成事件的确切列表项?
如果我理解正确,这是我会使用的代码:
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
int lastSelectedIndex = 0;
string lastSelectedValue = string.Empty;
foreach (ListItem listitem in CheckBoxList1.Items)
{
if (listitem.Selected)
{
int thisIndex = CheckBoxList1.Items.IndexOf(listitem);
if (lastSelectedIndex < thisIndex)
{
lastSelectedIndex = thisIndex;
lastSelectedValue = listitem.Value;
}
}
}
}
是否有任何事件捕获系统可以帮助我识别生成事件的确切列表项?
您可以使用CheckBoxList的事件CheckBoxList1_SelectedIndexChanged。当单击列表中的复选框时,将调用此事件,然后您可以检查任何条件。
编辑:
以下代码允许您获取用户选择的最后一个复选框索引。使用这些数据,您可以获取用户最后选择的值。
protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
string value = string.Empty;
string result = Request.Form["__EVENTTARGET"];
string[] checkedBox = result.Split('$'); ;
int index = int.Parse(checkedBox[checkedBox.Length - 1]);
if (CheckBoxList1.Items[index].Selected)
{
value = CheckBoxList1.Items[index].Value;
}
else
{
}
}
string result = Request.Form["__EVENTTARGET"];
string [] checkedBox = result.Split('$'); ;
int index = int.Parse(checkedBox[checkedBox.Length - 1]);
if (cbYears.Items[index].Selected)
{
//your logic
}
else
{
//your logic
}
不知道你怎么看,但作为用户,我不希望每次选中复选框项目时页面都要重新提交。
这是我会选择的解决方案(使用jQuery):
在表单上声明一个服务器端隐藏字段:
<asp:HiddenField ID="HiddenField1" runat="server" EnableViewState="true" />
然后为复选框连接客户端事件处理程序以存储复选框的点击:
$('.someclassforyourcheckboxes').click(function() {
$('#HiddenField1').val($(this).attr('id'));
这是一种轻量级机制,用于存储“最新”复选框的ID。您不必为复选框设置autopostback=true并进行不必要的postback。
您不必使用jQuery-您可以使用常规JavaScript,但是,为什么要做更多的工作?=)
然后,当您实际执行postback(我假设是在单击提交按钮时),只需检查隐藏字段的值即可。
当然,除非您想在每次复选框单击时进行postback,但我无法想象您想要这样做的情况(也许您正在使用UpdatePanel)。
编辑
复选框列表的HTML如下所示:
<input type="checkbox" name="vehicle" value="Bike" /> I have a bike
所以,你可以访问三个东西:
车辆 = $(this).attr('name');
自行车 = $(this).attr('value');
我有一辆自行车 = $(this).html();
如果你想要访问数据绑定的值,请尝试第二种技术。
试试看吧。