Как отключить кнопку после отправки формы? - PullRequest
12 голосов
/ 27 августа 2010

Я использую веб-формы asp.net; Я хочу отправить форму и оставить кнопку отключенной, пока она не будет сохранена в моей базе данных, точно так же, как Stackoverflow. Любое предложение?

protected void Lb_Save_Click(object sender, EventArgs e)
{
   //disable my button
      //Do a DB insert 
   //enable my button
}

EDIT:

Сначала я сделаю проверку на стороне клиента, поэтому я не хочу, чтобы моя кнопка там была отключена, но я хочу отключить ее после запуска функции onclick. Надеюсь, вы все поняли мою точку зрения.

Также я хотел бы сделать то же самое для asp: linkbutton, но я не знаю, как ведет себя firefox. Как ссылка будет отображаться как якорь, как я могу отключить ее?

Ребята, вы не поняли мой вопрос.

Как отключить кнопку asp: во время обратной передачи? (не в jQuery / Javascript)

Ответы [ 6 ]

7 голосов
/ 27 августа 2010

Он отключает его на submit(), он никогда не включает его снова, потому что вы перенаправлены.Однако, если вы хотите сделать какую-то проверку, вы просто сделаете

$("#yourForm").submit(function(e) {
    $("#yourButton").attr('disabled','disabled');
    if (whateverValidation) {
        e.preventDefault();
        $("#yourButton").removeAttr('disabled');
    } 
});
2 голосов
/ 06 сентября 2010

Единственный способ сделать это с веб-формами (которые не являются mvc) - это скрыть исходную кнопку и заменить ее изображением отключенной кнопки или другой кнопки, которая отключена.Если вы на самом деле отключите кнопку .net, JavaScript не выполнит отправку.

(Да, я знаю, что вы можете «взломать» .net JavaScript, но на самом деле это лучше?)

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

NB: MVCдолжен быть таким же простым, как и код в других ответах, которые просто отключают кнопку перед вызовом ajax.SO использует MVC, поэтому у них нет проблем, с которыми вы сталкиваетесь.

2 голосов
/ 02 сентября 2010

Как?Это волшебство.

Теперь, если вам не нужен javascript:

  1. При обратной передаче отключите кнопку.
  2. Не выполняйте реальную работу, но установите Sessionпеременная, чтобы указать, какая работа необходима.
  3. Установить метатег HTML для принудительного немедленного обновления.
  4. Return - браузер немедленно обновит страницу.
  5. Когда вы получите запрос сейчас,вы проверяете Session var и выполняете работу.

Могут быть и другие способы, но, честно говоря, все они странные, почему вы не хотите JavaScript?

2 голосов
/ 27 августа 2010

Краткий ответ: Javascript.

Более длинный ответ:

$('#formid').submit(function () {
     $('#buttonid').hide();
 $('#disabledbuttonimageid').show();
});
0 голосов
/ 06 сентября 2010

Попробуйте следующий код.

jQuery ('# mybuttonid'). Click (function () {jQuery (this) .attr ('disabled', disabled ');});
0 голосов
/ 27 августа 2010

Хорошо, вот код, который может дать вам представление о том, что делать.Вам понадобится класс DISABLED, который установит соответствующие стили CSS для кнопки или чего-то еще, чтобы она выглядела отключенной ...

КЛИЕНТСКИЙ СТОРОННЫЙ СКРИПТ JAVA

function doRequest(MY_DATA_THAT_I_WANT_TO_SEND)
{
    $.ajax({
       type: "GET",
       url: "saving_page.aspx?data="+MY_DATA_THAT_I_WANT_TO_SEND,
       timeout: 10000,
       beforeSend: function()
       {    
           $("#button").toggleClass("DISSABLED");
       },
       complete: function(XMLHttpRequest, textStatus)
       {
           //Or you can remove success handler and let complete hander enables
           //the button, so it gets enabled if there was an error or there was success
           //$("#button").toggleClass("DISSABLED");         
       },                             
       success: function(data)
       {                                            

           if(data == "OK") $("#button").toggleClass("DISSABLED");                       
       }

     });        
};

SERVER SIDE CS

protected void Page_Load(object sender, EventArgs e)
{
    string data = Request.Params.Get("data");
    saveDataToDataBase(data);

    //Sleep some more...
    Thread.Sleep(3000);

    //Send ok
    Response.Write("OK");
    Response.End();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...