Post/Redirect/Get Pattern in ASP.NET MVC
-
22-09-2019 - |
Question
What is the best practice for implementing the Post/Redirect/Get pattern in ASP.NET MVC? In particular, what is the best way to do this when you want to redirect back to the initial action/controller?
Here's how I am currently doing this:
- Display form to user.
- In the form, use
<%= Html.Hidden("returnUrl") %>
- In the action, use
ViewData["returnUrl"] = Request.Url;
- In the form, use
- User submits the form via POST
- Redirect to the
returnUrl
model-binding, if notnull
. Otherwise, redirect to homepage.
This get's the job done, but it feels like this would result in a lot of duplication. I also realized that I could probably redirect to Request.UrlReferrer
...
What do you suppose is the cleanest, most ideal method of accomplishing this?
Solution
The way you're doing this is fine, but it looks like you might be overthinking it a little bit. Do your POST actions take form posts from more than one form? If not, why bother with a hidden form field? You could get away with a simple RedirectToAction("MyAction")
OTHER TIPS
Typically, an action that handles a POST knows where it needs to redirect upon successful submission. Therefore, each action that implements RGP can simply invoke RedirectToAction(string)
.
public ViewResult Edit(string email)
{
// save the email
return RedirectToAction("Edit");
}