البته روش توضیح داده شده همان روش متداول PRG است. اگر حتما نیاز به 303 دارید به روش زیر باید عمل کرد:
و بعد برای استفاده:
using System.Web.Mvc; namespace TestMvcPRG.Helper { public class Redirect303 : ActionResult { private string _url; public Redirect303(string url) { _url = url; } public override void ExecuteResult(ControllerContext context) { context.HttpContext.Response.StatusCode = 303; // redirect using GET context.HttpContext.Response.RedirectLocation = _url; } } public abstract class BaseController : Controller { public Redirect303 Redirect303(string actionName) { return new Redirect303(Url.Action(actionName)); } public Redirect303 Redirect303(string actionName, object routeValues) { return new Redirect303(Url.Action(actionName, routeValues)); } public Redirect303 Redirect303(string actionName, string controllerName) { return new Redirect303(Url.Action(actionName, controllerName)); } public Redirect303 Redirect303(string actionName, string controllerName, object routeValues) { return new Redirect303(Url.Action(actionName, controllerName, routeValues)); } } }
using System.Web.Mvc; using TestMvcRPG.Helper; namespace TestMvcPRG.Controllers { public class HomeController : BaseController { [HttpGet] public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(string data) { if (ModelState.IsValid) { return Redirect303("Index"); // post-redirect-get } return View(); } } }