#asp.net #drop-down-menu
#asp.net #выпадающее меню
Вопрос:
Я хочу показать пользователю диалоговое окно подтверждения, когда он пытается изменить выбранный элемент выпадающего списка. Если выбор подтвержден, я хочу выполнить некоторый код на стороне сервера.
Допустим, DDL имеет значения 1 и 2.
- Выбрано значение 1 (по умолчанию).
- Пользователь выбирает значение 2. Появится диалоговое окно подтверждения.
- Если пользователь выбирает «Да», то выбранный элемент изменяется. Должен быть выполнен некоторый код на стороне сервера.
- Если пользователь выбирает «Нет», то выбранному элементу возвращается значение 1. Код на стороне сервера не выполнен.
У меня много проблем с этим, поскольку в DDL мало событий для использования.
Пока я получил
this.MyDropDown.Attributes["onChange"] = @"return confirm('Are you sure?');";
и event handler
для SelectedIndexChanged
события DDL для кода на стороне сервера.
Но у меня возникли проблемы с тем фактом, что я не могу ни остановить (или отменить) изменяемый элемент, ни запускаемое SelectedIndexChanged
событие.
Есть предложения?
Ответ №1:
Причина, по которой это не запускает событие на стороне сервера, заключается в том, что вы удаляете встроенный обработчик событий webforms, который запускал бы отправку обратно. Что касается возврата значения, вам нужно сохранить его, а затем перезагрузить.
добавьте эту функцию javascript
function handleChange(opt) {
if (!confirm('are you sure')) {
opt.selectedIndex = opt.oldIndex;
}
else {
__doPostBack('MyDropDown','')
}
}
и установите события на стороне клиента следующим образом
this.MyDropDown.Attributes["onChange"] = "handleChange(this)";
this.MyDropDown.Attributes["onFocus"] = "this.oldIndex = this.selectedIndex";
Комментарии:
1. Потрясающе!!! Это именно то, что мне было нужно. Убедитесь, что вы отключили AutoPostBack = True при использовании этого, потому что предложение else делает это за вас.
Ответ №2:
Это законченное решение, поскольку я уже использовал его. Просто обратитесь к следующим инструкциям:
// Paste it in Aspx file
function handleChange(opt) {
if (!confirm('Are you sure?')) {
opt.selectedIndex = opt.oldIndex;
}
else {
__doPostBack('MyDropDown','')
}
}
Вставьте это в событие загрузки страницы за пределами IsPostBack:
this.MyDropDown.Attributes["onChange"] = "handleChange(this)";
this.MyDropDown.Attributes["onFocus"] = "this.oldIndex = this.selectedIndex";
Примечание: Установите для выпадающего списка значение AutoPostBack False.