Pregunta

Tengo algunos controles que heredan de los botones de ASP.NET y uso 'onserverclick'.

Si el usuario hace clic dos veces, el botón activa dos eventos del lado del servidor.¿Cómo puedo prevenir esto?

Intenté configurar "this.disabled='true'" después del clic (en el atributo 'onclick') a través de javascript, pero eso también bloquea la primera devolución de datos.

¿Fue útil?

Solución

Vea este ejemplo para deshabilitar el control en la devolución de datos.Debería ayudarte a hacer lo que estás tratando de lograr.

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

Otros consejos

No necesariamente desea mostrar el botón deshabilitado en la devolución de datos.Desea asegurarse de que no envíen accidentalmente dos veces.Entonces, deshabilitar u ocultar el botón como resultado de un lado del servidor La acción ya es demasiado tarde en el juego.En este punto, la segunda solicitud ya está en camino.Debe hacerlo con javascript o asegurarse de que el código del lado del servidor no se ejecute dos veces.

En el caso de un panel de actualización y un botón dentro de una plantilla FormView, utilizo el siguiente enfoque:

<script type="text/javascript">
    // Using that prm reference, hook _initializeRequest
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung);

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel
    function InitializeRequestBuchung(sender, args) {
        var arrButtonIds = ["ButtonInsert", "ButtonUpdate"];

        // Get a reference to the PageRequestManager.
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) {
            args.set_cancel(true);
        }
    }
</script>

Esto cancela una devolución de datos siguiente si actualmente una devolución de datos asíncrona todavía está activa.Funciona perfectamente.

Alguien más dijo esto en algún lugar de aquí hace unos días, y estoy de acuerdo: use javascript para simplemente esconder el botón en lugar de desactivarlo;podría mostrar una imagen "giradora" en su lugar, que le permite al usuario saber lo que está sucediendo.

En lugar de esconderme, lo que he hecho es intercambiar botones usando javascript.Muestre otra imagen atenuada al hacer clic en el primer botón.

Establezca la propiedad del botón UseSubmitBehavior en falso.Luego cree una función OnClientClick que deshabilite el botón.Se vería algo como esto:

<script type="text/javascript">
   function disableFunctn(button){
       button.disabled = true;
   }
</script>
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/>

forma más rápida y barata:

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/>

También puedes probar, por ejemplo, btnSave.Enable = false;cuando se presiona el botón y antes de que se realice el procesamiento del botón en la rutina Click Event.Si necesita restablecerlo para permitir su habilitación, tenga un botón separado que restablezca el botón para su reutilización.

Otro método es configurar el botón de verificación para que se le pregunte al usuario si desea guardar; debería aparecer ambas veces.

Otro método más sería marcar la primera aparición y luego configurar una ventana emergente para la segunda para verificar un segundo uso o un uso posterior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top