Soy relativamente nuevo en el desarrollo web ASP.Net &, así que tengan paciencia conmigo. Durante las pruebas de nuestras páginas web, noté que si un usuario pulsaba "Actualizar/Volver a cargar" y hacía clic en "Reintentar" cuando se le solicitaba en el cuadro de diálogo "Reenviar información", cualquier último evento que se disparara antes de que el usuario lo eligiera para "Refrescar", se volverá a disparar de nuevo.
Como ejemplo, tenemos los botones de navegación "Anterior" y "Siguiente" que permiten al usuario navegar a través de una serie de preguntas. Si el operador pulsa "Actualizar/Recargar", cualquier botón de navegación que el usuario haya pulsado se disparará nuevamente. Esto realmente tiene sentido, pero el efecto neto es que el usuario termina en la página siguiente o anterior desde la que antes estaba viendo. ¿Hay una solución alternativa para este tipo de cosas?¿Efecto secundario de actualización/recarga con ASP.net?
Respuesta
Esto se debe a la forma en que está manipulando PostBacks.
Un poco de historia es necesaria:
La web es "sin estado", lo que significa que cada petición de un cliente a un servidor es independiente de la solicitud antes de que la solicitud o después de ella. No hay un "estado" mantenido. Si observa el nivel de HTTP, es simplemente un blob de texto enviado al servidor que dice "envíeme esta información" y el servidor lo envía de vuelta. No hay "Yo soy el mismo usuario que estaba aquí hace 3 minutos y me gustaría pasar a la página siguiente desde la que estaba la última vez que hablamos".
La manera en que ASP.NET resuelve este problema usa ViewState y devoluciones. Cada vez que hace clic en un botón ASP.NET, en realidad está enviando un formulario que tiene un campo oculto con un montón de datos codificados. Esa información contiene todos de la información que el servidor necesita para "reconstruir" el estado de la página tal como fue la última vez. Luego puede ejecutar el "movimiento a la página siguiente" y ese comando tiene sentido. Cuando ASP.NET envía el HTML de vuelta al cliente, actualiza ese campo oculto con nuevos datos, representando de nuevo el estado de la página, tal como está ahora. Y la próxima vez que haga clic en cualquier botón, los datos se envían nuevamente, la página se reconstruye nuevamente y el ciclo se repite.
Cuando el usuario pulsa "actualizar", el navegador le pregunta si desea volver a enviar el formulario. Están volviendo a enviar la misma información que hicieron la última vez.
Implicaciones para usted:
Si intenta realizar un seguimiento de los datos sobre el usuario o lo que están haciendo con independencia de la ViewState de ASP.NET, que tendrá que asegurarse de que se sincronizan que cada vez que la página procesos.
Es posible que desee mantener la "página actual" en ViewState:
ViewState.Add("CurrentPage", intCurrentPage);
Así que cuando se llama al manejador MoveNext
caso, puede estar seguro de que se están moviendo en relación con la página, ya que fue la última vez fue enviado al cliente
Muchas gracias, muy útil. –
Puede mirar hacia el patrón Post-Redirect-Get que se usa con más frecuencia en asp.net mvc.
Ver here para más detalles.
Esa es una buena técnica para mitigar las nuevas presentaciones de formularios reales, pero no estoy seguro de si sería una buena idea usarla para lo que es esencialmente cada solicitud en una aplicación WebForms de alto perfil. Eso duplica la cantidad de solicitudes en toda la aplicación. –
El OP no mencionó nada sobre "con gran estado de alerta", es solo su suposición y, a menos que tenga> 200 solicitudes por segundo, su infraestructura apenas notaría el viaje adicional de ida y vuelta. Para deshacerse de esos diálogos y los peligros del reenvío, vale la pena el trabajo adicional. – redsquare
Si nota que SO usa la misma técnica. No veo muchos problemas de rendimiento aquí, ¡y se lo busca más de unas pocas veces por segundo! – redsquare
- 1. Getter con efecto secundario
- 2. GCC Reducir binario Inflar - extraño efecto secundario
- 3. escapado Doble Cita efecto secundario de comandos de Windows
- 4. ¿Hay algún efecto secundario de usar muchas funciones estáticas?
- 5. Advertencia de efecto secundario de la sesión PHP con variables globales como fuente de datos
- 6. ASP.Net - CacheDuration propiedad parece tener ningún efecto
- 7. ¿Por qué el aumento de una excepción es un efecto secundario?
- 8. efecto secundario para aumentar maxpermsize y el tamaño máximo de almacenamiento dinámico
- 9. Desencadenando haslayout en IE 6, ¿cuál es el efecto secundario de usar * html div {height: 1%; }
- 10. gotchas de efecto secundario en python/numpy? historias de terror y escapes estrechos quería
- 11. ¿Hay algún efecto secundario de regresar desde el interior de una instrucción using()?
- 12. ¿La creación de un nuevo subproceso tiene un efecto secundario de vaciar el caché?
- 13. ¿Hay algún efecto secundario de regresar desde el interior de una declaración foreach?
- 14. Alternar con efecto de clic
- 15. efecto de flash con jquery
- 16. Efecto de tipografía con CSS
- 17. Efecto de vidrio - Efecto artístico
- 18. ¿Tiene algún efecto secundario la creación de un enlace simbólico a otro enlace simbólico?
- 19. ¿podemos cambiar el nombre de nuestras carpetas Rails y no tener ningún efecto secundario?
- 20. Acceso al control principal desde el control secundario: ASP.NET C#
- 21. Emacs: el indicador TODO en el margen izquierdo tiene un extraño efecto secundario: borrar caracteres
- 22. ¿Hay algún efecto secundario adverso para cargar html5shiv en cada navegador?
- 23. ¿Tiene algún efecto secundario para eliminar el controlador nulo del evento?
- 24. jQuery .load() con efecto fadeIn
- 25. ¿Cómo puedo hacer un control con una colección control secundario en ASP.Net
- 26. ASP.NET MVC - Model.OrderBy La fecha no tiene efecto
- 27. ¿Cómo extraigo el texto secundario con Nokogiri?
- 28. Efecto puerta de apertura con Core Animation
- 29. Salir del proceso secundario después de os.fork()
- 30. ¿Se puede aplicar un efecto de desplazamiento de CSS a un elemento que no sea secundario del elemento de desplazamiento?
Ver: http://stackoverflow.com/questions/743580/page-refresh-causes-duplicate-post-in-asp-net-applications – Shog9