首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ModelStateDictionary MVC手动将数据从ASP.NET绑定到表示模型?

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

Stack Overflow用户
提问于 2016-12-08 18:35:01
回答 1查看 317关注 0票数 5

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

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

当重定向发生时,我希望保存模型状态,以便在显示错误时页面看起来相同。我能够使用ActionFiltersTempData 通过这种方法保存状态模型和错误。但是,当请求被重定向时,从POSTGET,模型状态被保存为System.Web.Mvc.ModelStateDictionary对象,这是一个键/值对,包含来自POST请求的所有用户输入。

为了将页面正确地呈现给最终用户,我需要将System.Web.Mvc.ModelStateDictionary中的数据绑定到我自己的表示模型中。

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

下面是我的代码

代码语言:javascript
复制
[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");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 18:54:11

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

代码语言:javascript
复制
[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);
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41046503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档