如何从复选框列表中获取最新选择的值?

12

我目前遇到一个问题。如何从一个asp.net复选框列表中获取最新选择的值?

通过循环复选框列表中的项目,可以获取最高选择索引及其值,但预计用户不会按顺序从较低索引选择复选框。那么,该如何处理?

是否有任何事件捕获系统可以帮助我识别生成事件的确切列表项?


1
你的意思是最新选择的复选框在列表中的最后一个吗? - Leniel Maccaferri
1
使用客户端脚本,如jQuery或其他工具来完成此操作... - http://jQuery.com/ - Hari Pachuveetil
3个回答

19

如果我理解正确,这是我会使用的代码:

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
    {

    }
}

如果用户先选择第三个复选框,然后再选择第二个复选框,那么这个函数不就会表明第三个复选框是最后一个选择器的值吗? - RPM1984
据我所理解,他想知道列表中最后一个选中的复选框。如果不是这种情况,那么这段代码应该被修改。 - Leniel Maccaferri
3
我认为他想要“最新的”,而不是“最后一个”(按顺序)。不过我可能错了。 - RPM1984
谢谢你们,但我想要上次选择的值。例如,第一次选中第三个复选框,然后选中第二个复选框。我想识别第二个复选框。我的意思是上次选中的复选框。 - Masud Rahman
@Masud - 我也是这么想的。我的回答有帮助吗? - RPM1984
@Masud Rahman - 在我的答案中使用新代码,您可以获取用户选择的最后一个索引。有了这个数据,您可以获取用户单击的最后一个复选框的选定值。 - Leniel Maccaferri

3
以下是代码,可获取最新选择的CheckBoxList项目。
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 
}

希望这能有所帮助。

0

不知道你怎么看,但作为用户,我不希望每次选中复选框项目时页面都要重新提交。

这是我会选择的解决方案(使用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();

如果你想要访问数据绑定的值,请尝试第二种技术。

试试看吧。


实际上我前几天正在使用Coolite下拉列表。该控件具有一个名为SelectedItems的属性,它是根据选择顺序选中项的数组。我在ASP.NET复选框列表中也在寻找类似的东西。 - Masud Rahman
另一件事是,我正在使用多选项复选框列表,并且复选框是从数据库绑定的。因此,我可以使用JavaScript来跟踪ID,但不确定是否可以跟踪为该复选框填充的值。这个值不是复选框中显示的文本,而是与复选框关联的其他ID,我可以从我的代码后面的页面获取它。您能否请提供一些示例代码:可以请提供一些处理带有JavaScript的可数据绑定复选框的代码吗? - Masud Rahman
@Masud,您需要跟踪什么?复选框项目的值吗?如果是这样,只需使用$(this).html(),它将为您提供复选框项目的文本(即值)。 - RPM1984
请记住,选中复选框是客户端事件。ASP.NET无法跟踪最后选择的项目(至少不够清晰)。JavaScript是您唯一的选择 - 当然,您可以在每次选中复选框时进行回发,但这在我看来会导致糟糕的用户体验。 - RPM1984

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接