2010-01-22 5 views
15

Quelle est la meilleure pratique pour implémenter le modèle Post/Redirect/Get dans ASP.NET MVC? En particulier, quelle est la meilleure façon de le faire lorsque vous voulez rediriger vers l'action/le contrôleur initial?Post/Redirect/Get Pattern dans ASP.NET MVC

Voilà comment je fais actuellement ceci:

  1. forme d'affichage à l'utilisateur.
    • Dans la forme, utilisez <%= Html.Hidden("returnUrl") %>
    • Dans l'action, utilisez ViewData["returnUrl"] = Request.Url;
  2. utilisateur soumet le formulaire POST via
  3. Redirect au modèle contraignant returnUrl, sinon null. Sinon, rediriger vers la page d'accueil.

Ceci est le travail accompli, mais il se sent comme cela se traduirait par beaucoup de duplication. Je me suis également rendu compte que je pourrais probablement rediriger vers Request.UrlReferrer ...

Que pensez-vous être la méthode la plus propre et la plus idéale pour accomplir cela?

Répondre

11

La façon dont vous faites ça va bien, mais il semblerait que vous soyez un peu trop réfléchi. Vos actions POST prennent-elles la forme de messages provenant de plusieurs formulaires? Si non, pourquoi s'embêter avec un champ de formulaire caché? Vous pouvez vous en sortir avec un simple RedirectToAction("MyAction")

+0

Actuellement, je ne prends pas les messages de formulaire de plus d'une forme - donc je vois clairement votre point. Dans ce cas particulier, je vais probablement utiliser RedirectToAction. Si, cependant, j'avais plus d'un formulaire, suggérez-vous toujours que je le fasse via ma méthode actuelle? – Charles

3

Généralement, une action qui gère un POST sait où il doit rediriger lors de la soumission réussie. Par conséquent, chaque action qui implémente RGP peut simplement appeler RedirectToAction(string).

public ViewResult Edit(string email) 
{ 
    // save the email 
    return RedirectToAction("Edit"); 
}