2012-05-18 3 views
0

У меня есть ретранслятор с кнопкой, которая сохраняет некоторые данные в БД. Моя проблема в том, что когда-то вызов к БД занимает немного, и пользователь иногда щелкает, чтобы сохранить несколько раз, вызывая добавление нескольких записей в db. Поэтому моя первая мысль заключалась в том, чтобы добавить дробовик и отключить кнопку при ее нажатии. Тромбон вращается, но когда кнопка отключена, он предотвращает вызов на сервер. Поэтому я посмотрел на this, но так как у меня есть куча разных кнопок (Update, Add, ...), которые вызывают несколько разных методов на стороне сервера, поэтому я не могу просто отправить __doPostBack($(button).attr('id'),''). Так что я думал, что мне может понадобиться вызов ajax, но я хотел посмотреть, есть ли какие-то другие идеи. Вот мой код: onClientClick на самом деле настраивается на стороне сервера, но это в основном то, что делается.Отключение кнопки предотвращает событие нажатия на сервер

Repeater:

<div style="position: relative; float: left;"> 
     <asp:Button ID="btnSave" runat="server" Text="Assign" OnClientClick="return fnAssignedButtonPressed(this);", OnClick="btnSave_Click" /> 
</div> 

Javscript:

function fnAssignedButtonPressed(button) { 
//validating inputs 
var valid = true; 

     if(valid) 
     { 
      $(button).attr('disabled', 'disabled'); 
      showWaitCursor(true); 
      __doPostBack($(button).attr('id'),''); 
     } 
    return valid; 
} 

Serverside:

protected void btnSave_Click(object sender, EventArgs e) 
{ 
//save 
// This method doesn't call called when I disable the button!! 
} 

ответ

0

я в конечном итоге делает это, но Я не знаю, как я к этому отношусь.

function fnAssignedButtonPressed(button) 
{ 
//validating inputs 
var valid = true; 
    if(valid) 
    { 
     showWaitCursor(true); 
     //set a timeout and then disable the button, this prevents the user from click the button multiple times. 
     // need the timeout bc when the button becomes disabled it prevents the onlick event from firing. 
     setTimeout(function() {fnDisableButton(button)}, 1); 
    } 
} 

function fnDisableButton(button) 
{ 
    $(button).attr('disabled', 'disabled'); 
} 
0

Ajax определенно может быть хорошим вариантом в зависимости от вашего сценария. В противном случае, вы могли бы показать, пожалуйста, подождите модальность с помощью диалогового интерфейса Jquery, таких как:

$('<div class="dialog" title="Please Wait">Please wait while your request is processing</div>').dialog({ 
    modal: true, 
    width: 350, 
    open: function (event, ui) { 
     $(".ui-dialog-titlebar-close").hide(); 
    }, 
}); 

После возвращения сервера, модальная автоматически исчезнут, и модальный вариант диалогового UI затемняется экран, так что пользователь не может нажмите на что угодно.

Смежные вопросы