2010-09-07 44 views
9

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

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

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

+1

最近您的意思是列表中最后一个复选框? – 2010-09-07 00:45:30

+1

使用客户端脚本,比如jQuery或其他来做到这一点... - http://jQuery.com/ – 2010-09-07 00:55:27

回答

13

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

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 
    { 

    } 
} 
+0

如果用户选择第三个复选框,然后第二个复选框,这个函数不会声明第三个复选框是最后一个复选框选择器的值? – RPM1984 2010-09-07 01:10:06

+0

从我的理解他想知道在列表中选择的最后一个复选框。如果情况并非如此,则应修改此代码。 – 2010-09-07 01:12:29

+2

我认为他想要“最新”,而不是“最后”(有序)。我可能是错的寿。 – RPM1984 2010-09-07 01:18:03

0

不知道你,但作为一个用户,我不希望每次检查复选框项目时都会回发页面。

这是解决方案,我将与(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();

如果你试图访问数据绑定值,尝试第二种方法。

试试看。

+0

其实我几天前正在使用Coolite dropdownlist。该控件有一个名为SelectedItems的属性,它是根据选择顺序的selecteditem的数组。我在asp.net复选框列表中查找类似的内容。 – 2010-09-07 01:42:42

+0

另一件事是,我使用多选的checkboxlist和复选框是从数据库中的数据绑定。所以使用JavaScript,我只能跟踪ID,但不知道我可以跟踪为该复选框填充的值。这个值不是复选框中显示的文本,而是与复选框关联的其他一些ID,我可以从我的代码隐藏页面中获得该复选框。你可以请张贴一些示例代码:你可以请张贴一些代码来处理javascript的数据绑定复选框吗? – 2010-09-07 01:50:08

+0

@Masud你需要跟踪什么?复选框项目的值?如果是这样,只需使用$(this).html(),它会给你复选框项的文本(即值) – RPM1984 2010-09-07 01:51:46

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 
} 

希望这会有所帮助。

相关问题