Как получить последнее выбранное значение из списка флажков? - PullRequest
11 голосов
/ 07 сентября 2010

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

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

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

Ответы [ 3 ]

14 голосов
/ 07 сентября 2010

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

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.При нажатии флажка в списке это событие вызывается, и затем вы можете проверить любое условие, которое вы хотите.

Редактировать:

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

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
    {

    }
}
3 голосов
/ 07 февраля 2012

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

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

0 голосов
/ 07 сентября 2010

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

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

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

Дайте попробовать.

...