问题
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?
回答1:
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")
回答2:
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");
}
来源:https://stackoverflow.com/questions/2120882/post-redirect-get-pattern-in-asp-net-mvc