Выпадающий список автоматически возвращает деньги после подтверждения клиента

StackOverflow https://stackoverflow.com/questions/73748

Вопрос

У меня есть выпадающий список, для параметра 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')");
&lt;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;} " &gt;
          &lt;asp:ListItem Text="tes" Value="1" >&lt;/asp:ListItem&gt;
            &lt;asp:ListItem Text="test" Value="-1"&gt;&lt;/asp:ListItem&gt;
            &lt;/asp:DropDownList&gt;

Напишите встроенную функцию и не указывайте "return" для условия, в котором вы хотите вернуть post.Это работает и соответствует стандартам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top