2010-08-27 16 views
12

Estoy usando asp.net webforms; Deseo enviar un formulario y mantener el botón desactivado hasta que se guarde en mi base de datos, exactamente como Stackoverflow. ¿Cualquier sugerencia?¿Cómo deshabilitar un botón una vez que se envía el formulario?

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

EDIT:

Voy a hacer una validación del lado del cliente en primer lugar, así que no quiero que mi botón para ser desactivado allí, pero yo quiero desactivarlo una vez que la función onclick comienza. Espero que entiendan mi punto.

También me gustaría hacer lo mismo para asp: linkbutton pero no sé cómo se comporta Firefox. Como el botón de enlace se representará como ancla, ¿cómo puedo desactivarlo?

Chicos, no recibiste mi pregunta.

Cómo deshabilitar el botón asp: durante la devolución de datos? (no en jQuery/Javascript)

+0

¿Realmente necesita ver un código para hacer eso? Cuando haces clic en ENVIAR TU PREGUNTA, envías la solicitud Ajax desde la página de un cliente que tiene toda la información que necesita guardarse, y deja que su tiempo de espera (solicitud) sea 0, por lo que bloquea hasta infinito (o puedes configurarlo para que sea más grande) , como 10 segundos), y también agregue controlador en la solicitud exitosa que habilitará el botón. En el lado del servidor, mantenga la respuesta hasta que guarde todos los datos en la base de datos, y luego responda con OK o lo que sea que reanude el hilo Ajax en el cliente y llame al cliente SUCCESS. Puedes hacerlo con jQuery ¿quieres ver cómo? – Cipi

+1

@Cipi: tal vez deberías publicar esto como respuesta: P – BoltClock

+0

Ok, ahora veo tu edición ... no-mi respuesta, creo que quieres que JS haga esto ... – Cipi

Respuesta

7

Se desactiva en submit(), nunca se permite de nuevo porque estás redireccionado. Sin embargo, si desea hacer algún tipo de validación que sólo haría

$("#yourForm").submit(function(e) { 
    $("#yourButton").attr('disabled','disabled'); 
    if (whateverValidation) { 
     e.preventDefault(); 
     $("#yourButton").removeAttr('disabled'); 
    } 
}); 
+0

@Robert mira mi edición –

+0

¿Por qué no quieres que el botón se deshabilite inmediatamente para evitar presentaciones múltiples? – Robert

+0

@Robert ya exactamente –

2

Respuesta corta: Javascript.

Respuesta larga:

$('#formid').submit(function() { 
    $('#buttonid').hide(); 
$('#disabledbuttonimageid').show(); 
}); 
+0

, esto mantendrá mi asp: botón desactivado hasta que mi pstback termine ... –

+0

@Murali - para ASP.NET, también debe tener en cuenta el nombre/id que modifica el marco. Lo que esto significa es que tendrás que usar una sintaxis diferente en tu selector jQuery. La sintaxis que se muestra aquí coincidiría con el control con una identificación de "buttonid". Sin embargo, el marco cambiaría esto en tiempo de ejecución a "some_big_long_string_buttonid", por lo que su selector sería algo así como ": button [id $ = 'buttonid']" para encontrar el control cuyo id * finaliza * en "buttonid". – GalacticCowboy

0

Ok, aquí está un cierto código que le puede dar una idea de qué hacer. Necesitará clase DESHABILITADA que fijará los estilos CSS apropiadas del botón o lo que sea lo que aparece deshabilitado ...

del lado del cliente JAVA SCRIPT

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");      
     } 

    });   
}; 

SERVIDOR LADO 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(); 
} 
2

Cómo ? Eso es una magia.

Ahora, si usted no quiere javascript:

  1. En devolución de datos, desactiva el botón.
  2. No realice ningún trabajo real, pero configure la variable Session para indicar qué trabajo se necesita.
  3. Establezca la metaetiqueta HTML para forzar la actualización inmediata.
  4. Devolución: el navegador actualizará inmediatamente la página.
  5. Cuando recibe la solicitud ahora, verifica la Sesión var y realiza el trabajo.

Puede haber otras formas, pero, francamente, todos son muy extraños, ¿por qué no quieres JavaScript?

+0

cómo se desactivará mi botón hasta que envíe mi registro a db si uso javascript ... –

+0

Eso ya lo han respondido otras personas. – queen3

2

La única manera de hacerlo con formularios web (que no es mvc) es ocultar el botón original y reemplazarlo con una imagen del botón deshabilitado u otro botón que esté deshabilitado. Si realmente deshabilita el botón, el JavaScript de .net no hará el envío.

(Sí, sé que puedes "hackear" el.JavaScript neto, pero en realidad, ¿eso es mejor?)

El JavaScript para hacer esto es simple una vez que sabes lo que tienes que hacer, si quieres ver algún código, debería poder desenterrarlo - solo pregunta en los comentarios.

NB: MVC debe ser tan simple como el código en las otras respuestas que simplemente deshabilitan el botón antes de la llamada ajax. SO está usando MVC para que no tengan los problemas que estás experimentando.

-1

Por favor, intente con el siguiente código.

jQuery ('# mybuttonid') haga clic en (function() {jQuery (este) .attr ('discapacitados', personas con discapacidad '); }).;
+1

has probado esto? No funciona –

+0

Sí, lo he probado y funciona bien para mí. Si tiene algún problema con esto, proporcione su fragmento de código. –

Cuestiones relacionadas