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

Posted

技术标签:

【中文标题】如何从复选框列表中获取最新的选定值?【英文标题】:How to get the latest selected value from a checkbox list? 【发布时间】:2011-04-08 23:27:35 【问题描述】:

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

通过遍历复选框列表的项目,我可以获得最高的选定索引及其值,但预计用户不会按从低到高的顺序选择复选框。那么,如何处理呢?

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

【问题讨论】:

最新是指列表中最后一个选中的复选框? 使用 jQuery 之类的客户端脚本或其他方式来执行此操作... - jQuery.com 【参考方案1】:

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

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。当单击列表的 CheckBox 时,将调用此事件,然后您可以检查所需的任何条件。

编辑:

以下代码允许您获取用户选择的最后一个复选框索引。使用此数据,您可以获得用户最后选择的值。

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
    

    

【讨论】:

如果用户选择了第三个复选框,然后选择了第二个复选框,这个函数不会说明第三个复选框是最后一个选择器值吗? 据我了解,他想知道列表中选择的最后一个复选框。如果不是这种情况,则应修改此代码。 我认为他想要的是“最新的”,而不是“最后的”(订购的)。我可能是错的。 谢谢你们,但我想要最后一次选择的值。例如,第一次选中第三个复选框,然后选中第二个复选框。我想确定第二个复选框。我的意思是上次选中的复选框。 @Masud - 这就是我的想法。我的回答有帮助吗?【参考方案2】:

以下是为您提供最新选择的 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 

希望这会有所帮助。

【讨论】:

【参考方案3】:

不了解您,但作为用户,我不希望每次选中复选框时页面都回发。

这是我会采用的解决方案(jQuery):

在表单上声明一个服务器端隐藏字段:

<asp:HiddenField ID="HiddenField1" runat="server" EnableViewState="true" />

然后为复选框连接客户端事件处理程序以存储单击的复选框:

$('.someclassforyourcheckboxes').click(function() 
   $('#HiddenField1').val($(this).attr('id'));

这是一种轻量级机制,用于存储单击的“最新”复选框的 ID。而且您不必为复选框设置 autopostback=true 并进行不必要的回发。

您不必使用 jQuery - 您可以使用常规 javascript,但是,为什么要做更多的工作? =)

然后,当您实际执行回发时(我假设在提交按钮上单击),只需检查隐藏字段的值。

当然,除非您希望在每次单击复选框时都回发,但我无法想象您想要这个的场景(也许您正在使用 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 复选框列表中寻找类似的东西。 另一件事是,我对复选框列表使用多项选择,而复选框是从数据库中绑定数据的。所以使用 javascript,我只能跟踪 ID,但不确定是否可以跟踪为该复选框填充的值。这个值不是复选框中显示的文本,而是与复选框相关的其他 ID,我可以从我的代码隐藏页面中获取。您能否为此发布一些示例代码:您能否发布一些代码来使用 javascript 处理数据绑定复选框? @Masud 您到底需要跟踪什么?复选框项的值?如果是这样,只需使用 $(this).html() 它将为您提供复选框项目的文本(即值) 请记住,选中复选框是客户端事件。 ASP.NET 无法跟踪最后一个选定的项目(无论如何都不干净)。 JavaScript 是您唯一的选择 - 当然,您可以在每次选中复选框项目时回帖,但在我看来,这是糟糕的用户体验。

以上是关于如何从复选框列表中获取最新的选定值?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用复选框和自定义适配器从 Listview 中获取选定的列表项?

如何从复选框数组中获取选定的复选框

如何在 WPF CheckBox ListBox 中获取选定项目

在回收站视图中滚动时,它向选定的复选框列表添加了一些其他值

从复选框集合中返回一串选定值

如何使用 jquery 从 asp.net 列表框中仅获取当前选定的选项