如何使用ASP.NET MVC将ModelStateDictionary中的数据手动绑定到表示模型?

时间:2016-12-08 18:35:02

标签: c# asp.net asp.net-mvc asp.net-mvc-5 modelstate

我使用ASP.NET MVC 5框架编写了一个应用程序。我在视图和ViewModel之间使用双向绑定。

由于我使用双向绑定,因此我获得了客户端和服务器端验证的好处,这很酷。但是,当我向服务器发送POST请求,并且请求处理程序抛出异常时,我想将用户重定向到GET方法。

当重定向发生时,我想保存模型状态,以便在显示错误时页面看起来相同。我可以使用ActionFiltersTempData via this approach保存状态模型和错误。但是,当请求被重定向时,从POSTGET,模型状态将保存为System.Web.Mvc.ModelStateDictionary对象,这是一个键/值对,其中包含来自{{{}的所有用户输入1}}请求。

为了正确地向最终用户呈现页面,我需要将POST中的数据绑定到我自己的演示模型。

如何将System.Web.Mvc.ModelStateDictionary对象绑定到我的演示文稿对象?

以下是我的代码的样子

System.Web.Mvc.ModelStateDictionary

1 个答案:

答案 0 :(得分:4)

如果出现错误,请不要重定向,只需返回视图。

[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);
    }
}