2008-10-20 6 views
5

Une page exécute un certain nombre de tâches et prend beaucoup de temps à traiter. Nous voulons donner à l'utilisateur des informations à chaque fois que chaque tâche est terminée.Attendre la page dans ASP.NET MVC

Dans ASP.NET WebForms, nous avons utilisé Response.Flush()

Quelle façon voulez-vous une approche dans ce ASP.NET MVC?

Répondre

1

Vous pouvez le faire du côté client. À chaque étape, vous définissez une variable de session avec l'étape en cours. Ensuite, vous faites une autre action dans votre contrôleur dit: "GetProgress" et assigner une vue et URI pour cela.

Dans l'action, vous allez vérifier cette session et renvoyer la progression actuelle de votre tâche. Du côté client, créez une minuterie (par exemple, setTimeOut) et vous appelez l'URI de l'action du contrôleur ultérieur chaque fois que la durée est écoulée - 1 seconde environ. C'est ça.

1

Moi personnellement, je considérerais deux optoins:

  • redirect attendre page (s), puis les actions feu
  • Faites-le style ajax
5

Vous pouvez toujours utiliser Response.Write() et Response.Flush() pour quelque statut que vous voulez envoyer en bas de la câble. Ou si vous avez votre thingy de progression dans un contrôle utilisateur, vous pouvez faire quelque chose comme:

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

de votre contrôleur tout en faisant votre opération de longue durée dans la méthode d'action du contrôleur. C'est à vous de choisir cette approche ou l'approche côté client comme mentionné dans les commentaires ici, je voulais juste souligner que côté serveur est toujours possible.

+0

J'ai une vue partielle avec le texte "please wait ..." et j'utilise cette approche. Mais le texte "veuillez patienter ..." reste sur la page après que tout soit chargé. Un moyen facile de le supprimer lorsque la vue finale est renvoyée à partir de la méthode Action? –

+0

@Frode Lillerud: Un morceau de Javascript qui supprime "veuillez attendre" du navigateur DOM ou le cache. – liggett78

2

Il existe deux méthodes de base:

  1. Interroger page de serveur qui renvoie l'état, puis une fois l'opération terminée, redirige vers une page de résultats. MVC n'a rien à faire de cette façon, vous devez utiliser une variable de serveur pour stocker les objets/état - c'est une manière plus pertinente pour une application Asp.NET standard car vous utilisez (vraisemblablement) des variables de session, etc. en tous cas. AJAX Appel du client vers un service Web sur le serveur. Asp.NET MVC va lancer le framework jQuery, donc utilisez-le pour l'appel client et la gestion des événements pour la réponse. Ce serait plus dans l'esprit de MVC qui n'utilise/ne doit pas utiliser l'état de session, etc.

Questions connexes