C#: предотвращение AutoPostBack в соответствии с диалоговым окном подтверждения

Я хочу показать диалоговое окно подтверждения, когда в asp:DropDownList выбрано определенное значение. Если диалоговое окно подтверждения возвращает false (отмена), я хочу предотвратить AutoPostBack.

<asp:DropDownList id="theDropDownID" onchange="foo()"></asp:DropDownList>

Однако он игнорирует возвращаемое из foo() значение и фактически выполняет обратную передачу.
Сгенерированный код события onchange выглядит следующим образом:

Фу(); setTimeout("__doPostBack('theDropDownID','')", 0);

так что в основном контроль setTimeout, который добавляет .net, выполнит эту работу.

Есть идеи, как это сделать?
Спасибо!


person Nir    schedule 05.08.2010    source источник


Ответы (2)


Либо

onchange="return foo();"

function foo() {
    //do whatever
    return false;
}

Или используйте следующий jQuery

  $(function () {   //equivallent to: $(document).ready(function() {
        $('#theDropDownID').removeAttr('onchange');  
        $('#theDropDownID').change(function(e) {  
            e.preventDefault();  
            if (confirm("do postback?")) {
             setTimeout('__doPostBack(\'theDropDownID\',\'\')', 0);
            }
        });
   });

Я предпочитаю второй подход, потому что это ненавязчивый javascript: все поведение вместе, а встроенного javascript нет вообще.

person Daniel Dyson    schedule 05.08.2010

Попробуйте установить значение onchange на:

onchange="return foo();"

это должно нормально сработать.

person Sam    schedule 05.08.2010