Как получить выбранное значение из списка флажок?
в настоящее время я сталкиваюсь с проблемой. Как получить последнее выбранное значение из 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();
если вы пытаетесь получить доступ к значению базы данных, попробуйте второй метод.
попробуйте.