Как получить выбранное значение из списка флажок?

в настоящее время я сталкиваюсь с проблемой. Как получить последнее выбранное значение из a asp.net список флажков?

из цикла через элементы списка флажков я могу получить самый высокий выбранный индекс и его значение, но не ожидается, что пользователь будет выбирать флажок последовательно от Нижнего к более высокому индексу. И как с этим справиться?

есть ли система захвата событий, которая поможет мне определить точный элемент списка, который генерирует событие?

3 ответов


Если я правильно понял, это код, который я бы использовал:

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;
            }
        }
    }
}

есть ли система захвата событий, которая поможет мне определить точный элемент списка, который генерирует событие?

вы используете событие CheckBoxList1_SelectedIndexChanged из списка CheckBoxList. При нажатии флажка списка вызывается это событие,а затем вы можете проверить любое условие, которое хотите.

Edit:

следующий код позволяет получить последний индекс флажка, выбранный пользователем. С помощью этих данных вы можете получить последнее выбранное значение пользователем.

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
    {

    }
}

Ниже приведен код, который дает вам последний выбранный элемент 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 
}

надеюсь, что это помогает.


не знаю о вас, но как пользователь я бы не хотел, чтобы страница возвращалась каждый раз, когда был установлен флажок.

это решение, с которым я бы пошел (jQuery):

объявите скрытое поле на стороне сервера в вашей форме:

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

затем подключите обработчики событий на стороне клиента для флажков для хранения флажков:

$('.someclassforyourcheckboxes').click(function() {
   $('#HiddenField1').val($(this).attr('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();

если вы пытаетесь получить доступ к значению базы данных, попробуйте второй метод.

попробуйте.