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

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

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

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


person Masud Rahman    schedule 07.09.2010    source источник
comment
Под последним вы подразумеваете последний флажок, выбранный в списке?   -  person Leniel Maccaferri    schedule 07.09.2010
comment
Для этого используйте сценарии на стороне клиента, такие как jQuery или что-то подобное... - jQuery.com   -  person Hari Pachuveetil    schedule 07.09.2010


Ответы (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. Когда щелкается 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
    {

    }
}
person Leniel Maccaferri    schedule 07.09.2010
comment
если пользователь выбирает третий флажок, а ЗАТЕМ второй флажок, не будет ли эта функция указывать, что третий флажок был последним значением селектора? - person RPM1984; 07.09.2010
comment
Насколько я понял, он хочет знать последний флажок, выбранный в списке. Если это не так, этот код следует изменить. - person Leniel Maccaferri; 07.09.2010
comment
я думаю, он хочет последнюю, а не последнюю (заказал). я могу ошибаться. - person RPM1984; 07.09.2010
comment
Спасибо вам, ребята, но я хочу последнее выбранное значение. Например, сначала установлен 3-й флажок, а затем установлен 2-й флажок. Я хочу определить второй флажок. Я имел в виду флажок, который установлен в прошлый раз. - person Masud Rahman; 07.09.2010
comment
@Масуд - я так и думал. Поможет ли мой ответ? - person RPM1984; 07.09.2010
comment
@Masud Rahman - с новым кодом в моем ответе вы можете получить последний индекс, выбранный пользователем. С помощью этих данных вы можете получить выбранное значение последнего флажка, на который нажал пользователь. - person Leniel Maccaferri; 07.09.2010

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

Надеюсь это поможет.

person mehul9595    schedule 07.02.2012

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

Это решение, с которым я бы пошел (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();

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

Попробуйте.

person RPM1984    schedule 07.09.2010
comment
На самом деле я работал с выпадающим списком Coolite несколько дней назад. Этот элемент управления имеет свойство SelectedItems, которое представляет собой массив selecteditem в соответствии с порядком выбора. Я искал что-то подобное в списке флажков asp.net. - person Masud Rahman; 07.09.2010
comment
Другое дело, что я использую множественный выбор для списка флажков, а флажок привязан к данным из БД. поэтому, используя javascript, я просто могу отслеживать идентификатор, но не уверен, что могу отслеживать значение, заполненное для этого флажка. это значение не является текстом, отображаемым в флажке, а каким-то другим идентификатором, связанным с флажком, который я могу получить на своей странице кода программной части. Не могли бы вы опубликовать пример кода для этого: не могли бы вы опубликовать код для обработки флажка с привязкой к данным с помощью javascript? - person Masud Rahman; 07.09.2010
comment
@Масуд, что именно тебе нужно отслеживать? Значение элемента флажка? Если это так, просто используйте $(this).html(), который даст вам текст элемента флажка (т.е. значение) - person RPM1984; 07.09.2010
comment
Имейте в виду, что установка флажка — это событие на стороне клиента. ASP.NET не может отслеживать ПОСЛЕДНИЙ выбранный элемент (в любом случае, не совсем чисто). JavaScript - ваш единственный вариант - конечно, вы можете отправлять сообщения КАЖДЫЙ РАЗ, когда флажок установлен, но, на мой взгляд, это плохой UX. - person RPM1984; 07.09.2010