2008-09-16 3 views
3

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

Я попытался добавить атрибут onchange «подтвердить возврат» («Пожалуйста, нажмите« ОК », чтобы изменить. В противном случае нажмите« ОТМЕНА? »;), Но он не будет возвращен, независимо от подтверждения , и значение в списке не вернется задний если отмена выбрано.

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

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

Спасибо!

ответ

8

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

т.е.


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

function DisplayConfirmation() { 
    if (confirm('Are you sure you want to do this?')) { 
    __doPostback('drpControl',''); 
    } 
} 
+0

это решение сработало. Мне понравилось, потому что это был самый простой из всех. Никогда не думал, что мне нужно будет позвонить __doPostBack ((). Спасибо! – Aamir 2008-09-16 18:40:29

0

Убедитесь, что событие подключен:

dropDown.SelectedIndexChanged += new EventHandler(dropDown_SelectedIndexChanged); 

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

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

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

 <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" /> 
+0

Я думаю, что это лучшее решение, которое я видел, и после долгих поисков я впервые увидел его, я не знаю, почему больше людей не предлагают его. – 2012-07-25 17:08:27

1

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

if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false; 
1

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

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

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

5

следующих работ, когда 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
if (!confirm('Please click OK to change. Otherwise click CANCEL?')) return false; 

Всегда возвращает так OnSelectedIndexChanged пожаров событие DropDownList в щелкает ли пользователь OK или CANCEL.

0
&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 и не получите «возврат» для условия, в котором вы хотите отправить сообщение. Это работает и соответствует стандартам.