Автоответчик DropdownList после подтверждения клиента - PullRequest
3 голосов
/ 16 сентября 2008

У меня есть выпадающий список с autopostback, установленным в true. Я хочу пользователь должен подтвердить, действительно ли он хочет изменить значение, который при обратной отправке запускает событие на стороне сервера (selectedindexxased).

Я попытался добавить атрибут onchange "return подтвердите (" Пожалуйста, нажмите OK, чтобы изменить. В противном случае нажмите CANCEL? '; "), Но он не выполнит обратную передачу независимо от подтверждения результат и значение в списке не возвращается обратно при отмене выбран.

Когда я удаляю атрибут onchange из тега DropdownList, страница выполняет обратную передачу. Это не когда добавляется атрибут onchange. Нужно ли еще подключать обработчик событий (я на C # .Net 2.0).

Любые выводы будут полезны.

Спасибо!

Ответы [ 8 ]

8 голосов
/ 16 сентября 2008

Вы пытались установить событие onChange для функции javascript, а затем внутри функции отобразить предупреждение javascript и использовать функцию __doPostback, если оно прошло?

т.е.

   
drpControl.Attributes("onChange") = "DisplayConfirmation();"

function DisplayConfirmation() {
  if (confirm('Are you sure you want to do this?')) {
    __doPostback('drpControl','');
  }
}
6 голосов
/ 16 сентября 2008

Вы можете использовать элемент управления CustomValidator для «проверки» раскрывающегося списка, вызывая функцию javascript, в которой вы делаете метод execute ():

        <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"  />
5 голосов
/ 23 апреля 2010

Следующее работает, когда DropDownList вызывает частичные обратные передачи:

// 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};");
1 голос
/ 21 июля 2010
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;

Всегда возвращает значение, поэтому событие OnSelectedIndexChanged выпадающего списка запускается независимо от того, нажимает ли пользователь кнопку OK или ОТМЕНА.

1 голос
/ 16 сентября 2008

Переопределение атрибута onchange не будет работать, если для AutoPostBack установлено значение true, поскольку ASP.NET всегда добавляет в конец сценария onchange следующее:

;setTimeout('__doPostBack(\'YourDropDown\',\'\')', 0)

Если для AutoPostBack задано значение false, тогда переопределение onchange с помощью сценария типа «подтвердите и __doPostBack» (см. Выше, ошибка .. ниже) будет работать, но вам, возможно, придется вручную создать функцию __doPostBack.

1 голос
/ 16 сентября 2008

В настоящее время вы всегда возвращаете результат confirm(), поэтому, даже если он возвращает true, вы все равно остановите выполнение события до того, как может сработать постбэк. Ваш onchange должен return false; только тогда, когда confirm() тоже так:

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false;
0 голосов
/ 17 апреля 2013
&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;

Написать функцию inline и не иметь «return» для условия, при котором вы хотите вернуть сообщение. Это работает и соответствует стандартам.

0 голосов
/ 16 сентября 2008

Убедитесь, что ваше мероприятие подключено:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged);

Вы также можете применить атрибут на стороне клиента для возврата подтверждения. Установите индекс соответственно в случае отмены.

dropDown.Attributes.Add("onchange", "javascript: return confirm('confirmation msg')");
...