Выпадающий список автоматически возвращает деньги после подтверждения клиента
-
09-06-2019 - |
Вопрос
У меня есть выпадающий список, для параметра autopostback установлено значение true.Я хочу, чтобы пользователь подтвердил, действительно ли он хочет изменить значение, которое при обратной отправке запускает событие на стороне сервера (selectedindexchanged).
Я попытался добавить атрибут onchange "return confirm ("Пожалуйста, нажмите OK, чтобы изменить.В противном случае нажмите ОТМЕНА?';") но обратная передача не будет выполнена независимо от результата подтверждения , и значение в списке не возвращается обратно, если выбрано значение Отмена .
Когда я удаляю атрибут onchange из тега DropDownList, страница выполняет обратную отправку.Этого не происходит при добавлении атрибута onchange.Нужно ли мне все еще подключать обработчик событий (я работаю на C # .Net 2.0).
Любые зацепки будут полезны.
Спасибо!
Решение
Вы пробовали установить событие onChange для функции javascript, а затем внутри функции отобразить оповещение javascript и использовать функцию __doPostBack, если оно пройдет?
т. е.
drpControl.Attributes("onChange") = "DisplayConfirmation();"
function DisplayConfirmation() {
if (confirm('Are you sure you want to do this?')) {
__doPostback('drpControl','');
}
}
Другие советы
Вы можете использовать элемент управления CustomValidator для "проверки" выпадающего списка, вызвав функцию javascript, в которой вы выполняете функцию confirm():
<asp:DropDownList ID="TestDropDown" runat="server" AutoPostBack="true" CausesValidation="true"
ValidationGroup="Group1"
OnSelectedIndexChanged="TestDropDown_SelectedIndexChanged">
<asp:ListItem Value="1" Text="One" />
<asp:ListItem Value="2" Text="Two" />
</asp:DropDownList>
<script type="text/javascript">
function ConfirmDropDownValueChange(source, arguments) {
arguments.IsValid = confirm("Are you sure?");
}
</script>
<asp:CustomValidator ID="ConfirmDropDownValidator" runat="server"
ClientValidationFunction="ConfirmDropDownValueChange" Display="Dynamic" ValidationGroup="Group1" />
Следующее работает, когда выпадающий список запускает частичную обратную передачу:
// caching selected value at the time the control is clicked
MyDropDownList.Attributes.Add(
"onclick",
"this.currentvalue = this.value;");
// if the user chooses not to continue then restoring cached value and aborting by returning false
MyDropDownList.Attributes.Add(
"onchange",
"if (!confirm('Do you want to continue?')) {this.value = this.currentvalue; return false};");
В настоящее время вы всегда возвращаете результат выполнения confirm()
, так что даже если он вернется true
, вы все равно остановите выполнение события до того, как сможет сработать обратная передача.Ваш onchange
следует return false;
только тогда, когда confirm()
тоже делает вот так:
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;
Переопределение атрибута onchange не сработает, если для параметра AutoPostBack установлено значение true, потому что ASP.NET всегда будет добавляться следующее в конец вашего скрипта onchange:
;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)
Если вы установите значение AutoPostBack равным false, то переопределите onchange с помощью скрипта типа "подтвердить и __допостбэк" (см. Выше, ошибка..ниже) будет работать, но вам, возможно, придется вручную создать функцию __doPostBack.
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;
Всегда возвращает, поэтому событие OnSelectedIndexChanged выпадающего списка срабатывает независимо от того, нажимает ли пользователь OK или CANCEL.
Убедитесь, что ваше мероприятие подключено:
dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);
Вы также можете применить атрибут на стороне клиента для возврата подтверждения.Установите соответствующий индекс, если он отменен.
dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
<asp:DropDownList runat="server" ID="ddlShailendra" AutoPostBack="True" OnSelectedIndexChanged="ddlShailendra_SelectedIndexChanged" onchange="javascript: { if(confirm('Click ok to prevent post back, Cancel to make a postback'))return true;} " >
<asp:ListItem Text="tes" Value="1" ></asp:ListItem>
<asp:ListItem Text="test" Value="-1"></asp:ListItem>
</asp:DropDownList>
Напишите встроенную функцию и не указывайте "return" для условия, в котором вы хотите вернуть post.Это работает и соответствует стандартам.