2008-10-20 18 views
5

Una página ejecuta varias tareas y tarda mucho tiempo en procesarse. Queremos dar a los usuarios retroalimentación a medida que se completa cada tarea.Espere la página en ASP.NET MVC

En formularios web ASP.NET que utiliza Response.Flush()

Qué manera usted tiene un enfoque esta en ASP.NET MVC?

Respuesta

1

Puede hacerlo en el lado del cliente. En cada paso, establece alguna variable de sesión con el paso actual. Luego, realiza otra acción en su controlador llamada llamada: "GetProgress" y asigne una vista y URI para ella.

En la acción, comprobará esta sesión y devolverá el progreso actual de su tarea. En el lado del cliente, cree un temporizador (es decir, setTimeOut) e invoque el URI de la acción del controlador posterior cada cantidad específica de tiempo: 1 segundo más o menos. Eso es.

1

mí personalmente me gustaría considerar dos optoins:

  • redirección que esperar la página (s), a continuación, disparar acciones
  • hacerlo al estilo Ajax
5

Todavía puede utilizar Response.Write() y Response.Flush() por cualquier estado que desee enviar por el cable. O si usted tiene su cosita progreso en un control de usuario, usted podría hacer algo como:

this.PartialView("Progress").ExecuteResult(this.ControllerContext); 
this.Response.Flush(); 

desde su controlador mientras que hace su operación larga en el método de la acción del controlador.

Depende de usted elegir este o el enfoque del lado del cliente como se menciona en los comentarios aquí, solo quería señalar que el lado del servidor todavía es posible.

+0

Tengo una vista parcial con el texto "por favor espere ...", y uso este enfoque. Pero el texto "por favor, espere ..." permanece en la página una vez que se haya cargado todo. ¿Una manera fácil de eliminarlo cuando se devuelve la Vista final desde el método de Acción? –

+0

@Frode Lillerud: Un fragmento de Javascript que elimina "por favor espere" del navegador DOM o lo oculta. – liggett78

2

Hay dos formas básicas:

  1. Poll una página de servidor que devuelve el estado, a continuación, una vez que la operación se realiza, redirige a una página de resultados. MVC no tiene nada que ver con esto, necesitarías usar una variable de servidor para almacenar objetos/estado: esta es una forma que es más relevante para una aplicación Asp.NET estándar ya que (presumiblemente) usas variables de sesión, etc. de todas formas.

  2. Llamada AJAX del cliente a un servicio web en el servidor. Asp.NET MVC va a implementar el marco jQuery, así que úselo para la llamada del cliente y el manejo de eventos para la respuesta. Esto estaría más en el espíritu de MVC que no/no debería usar estado de sesión, etc.

Cuestiones relacionadas