我使用ASP.NET MVC 5框架编写了一个应用程序。我正在使用视图和ViewModels之间的双向绑定。
因为我使用的是双向绑定,所以我得到了客户机和服务器端验证的好处,这是很酷的。但是,当我向服务器发送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");
}
}发布于 2016-12-08 18:54:11
如果有错误,不要重定向,只需返回视图。
[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);
}
}https://stackoverflow.com/questions/41046503
复制相似问题