Jay*_*len 5 c# asp.net asp.net-mvc modelstate asp.net-mvc-5
我使用ASP.NET MVC 5框架编写了一个应用程序.我在视图和ViewModel之间使用双向绑定.
由于我使用双向绑定,我得到了客户端和服务器端验证的好处,这很酷.但是,当我向POST服务器发送请求,并且请求处理程序抛出异常时,我想将用户重定向到该GET方法.
当重定向发生时,我想保存模型状态,以便在显示错误时页面看起来相同.我可以使用ActionFilters和TempData 通过这种方法保存状态模型和错误.然而,当请求被重定向,从POST到GET所述模型状态被保存为System.Web.Mvc.ModelStateDictionary对象,它是一个密钥/值对与从附带的所有用户输入POST请求.
为了正确地向最终用户呈现页面,我需要将数据绑定System.Web.Mvc.ModelStateDictionary到我自己的表示模型中.
如何将System.Web.Mvc.ModelStateDictionary对象绑定到我的演示文稿对象?
这是我的代码的样子
[ImportModelStateFromTempData]
public ActionResult show(int id)
{
var prsenter = new UserProfileDetailsPresenter(id);
ModelStateDictionary tmp = TempData["Support.ModelStateTempDataTransfer"];
if(tmp != null)
{
// Some how map tmp to prsenter
}
return View(prsenter);
}
[HttpPost]
[ValidateAntiForgeryToken]
[ExportModelStateToTempData]
public ActionResult Update(int id, DetailsPresenter model)
{
try
{
if (ModelState.IsValid)
{
var updater = new UpdateAddressServiceProvider(CurrentUser);
updater.Handle(model.General);
}
}
catch (Exception exception)
{
ModelState.AddModelError("error", exception.Message);
} finally
{
return new RedirectResult(Url.Action("Show", new { Id = id }) + "#General");
}
}
Run Code Online (Sandbox Code Playgroud)
如果出现错误,不重定向,只返回视图。
[HttpPost]
[ValidateAntiForgeryToken]
[ExportModelStateToTempData]
public ActionResult Update(int id, DetailsPresenter model)
{
try
{
if (ModelState.IsValid)
{
var updater = new UpdateAddressServiceProvider(CurrentUser);
updater.Handle(model.General);
}
return new RedirectResult(Url.Action("Show", new { Id = id }) + "#General");
}
catch (Exception exception)
{
ModelState.AddModelError("error", exception.Message);
// Return the named view directly, and pass in the model as it stands.
return View("Show", model);
}
}
Run Code Online (Sandbox Code Playgroud)