2010-08-27 20 views
7

Uno simple aquí ... ¿existe una forma clara de evitar que un usuario haga doble clic en un botón en un formulario web y cause así que se activen eventos duplicados?Impedir la devolución de datos duplicados en ASP.Net (C#)

Si tuviera un formulario de comentarios, por ejemplo, y el usuario escribe "este es mi comentario" y hace clic en enviar, el comentario se muestra a continuación ... sin embargo, si hacen doble clic, hacen triple clic o simplemente se vuelven locos el teclado pueden causar que se publiquen múltiples versiones.

del lado del cliente que podía fácilmente deshabilitar el botón onclick - pero prefiero soluciones de servidor a cosas como esta :)

¿Existe un tiempo de espera de la devolución de datos por estado de vista que se puede establecer, por ejemplo?

Gracias

Respuesta

2

No creo que deba cargar el servidor para tareas triviales como estas. Podría probar alguna solución de bloqueo de IU jquery como this. El kit de herramientas de Microsoft Ajax también debería tener algún control que haga lo mismo. Lo había usado hace mucho tiempo, no puedo recordar el nombre del control.

+0

¡Punto justo, lado del cliente! – isNaN1247

+0

el enlace parece estar muerto. –

1

Establecer una variable de sesión cuando el usuario entra en la página como la Sesión [ "FormXYZSubmitted"] = false. Cuando se envía el formulario comprobar que la variable como

if((bool) Session["FormXYZSubmitted"] == false) { 
    // save to db 
    Session["FormXYZSubmitted"] = true; 
} 
+0

que puede hacerlo en el botón evento de clic, así para ser preciso –

+0

No incluí eso, pero es correcto. – Zafer

0

he tenido el mismo escenario. La solución de uno de mis compañeros de trabajo fue implementar un tipo de temporizador en Javascript, para evitar considerar el segundo clic como un clic.

Espero que ayude,

0

Desactive el botón al hacer clic, utilice jquery o microsoft ajax toolkit.

0

Dependiendo de lo importante que es para usted, podría crear una matriz de una sola vez el GUID de la que se quita de la matriz una vez que la actualización ha sido procesada (es decir, publicado de nuevo en estado de vista/campo oculto)

Si el GUID no está en la matriz en la devolución de datos, la solicitud no es válida.

Sustituya la tabla de la base de datos para la matriz en un entorno agrupado.

0

El lado del cliente puede ser complicado si está utilizando la validación de Asp.Net.

Si usted tiene una página principal, poner esto en la página maestra:

void IterateThroughControls(Control parent) 
    { 
     foreach (Control SelectedButton in parent.Controls) 
     { 
      if (SelectedButton is Button) 
      { 
       ((Button)SelectedButton).Attributes.Add("onclick", " this.disabled = true; " + Page.ClientScript.GetPostBackEventReference(((Button)SelectedButton), null) + ";"); 
      } 

      if (SelectedButton.Controls.Count > 0) 
      { 
       IterateThroughControls(SelectedButton); 
      } 
     } 
    } 

A continuación, añadir esto a la página maestra Load:

IterateThroughControls(this); 
Cuestiones relacionadas