12

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

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

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

4

3 回答 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。单击列表的 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
    {

    }
}
于 2010-09-07T01:02:19.233 回答
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 
}

希望这可以帮助。

于 2012-02-07T09:55:37.663 回答
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();

如果您尝试访问数据绑定值,请尝试第二种技术。

试试看。

于 2010-09-07T01:16:59.873 回答