【问题标题】:Why is ModelStateToTempData Attribute from MVCContrib not working?为什么 MVCContrib 的 ModelStateToTempData 属性不起作用?
【发布时间】:2011-03-06 10:21:49
【问题描述】:

出于验证目的,我只是尝试将 ModelState 从一个操作传递到同一控制器中的另一个操作。但是,模型状态不会更新。我看到 TempData["____MvcContrib_ValidationFailures____"] 包含来自转发操作的 ModelStateDictionary,但我认为这应该自动转移到我当前的 ModelState 中?我哪里错了?

我正在使用 ASP.NET MVC2 和 MVCContrib 2.0.36.0。我也试过用这个属性装饰Controller,但是结果是一样的。

代码:

[HttpGet]
[ModelStateToTempData]
public ActionResult NewsEventsSignup()
{
    var newsEventsSignupDetails = this.TempData.GetItem<NewsEventsSignupDetails>();

    var viewModel = _newsEventsSignupPageViewModelMapper.MapFrom(newsEventsSignupDetails);

    return this.View(viewModel);
}

[HttpPost]
[ModelStateToTempData]
[ValidateAntiForgeryToken]
public ActionResult NewsEventsSignup(NewsEventsSignupFormViewModel newsEventsSignup)
{
    ActionResult resultToReturn;

    var newsEventsSignupDetails = _newsEventsSignupDetailsMapper.MapFrom(newsEventsSignup);

    try
    {
        _newsEventsSignupTasks.SignupForNewsAndEvents(newsEventsSignupDetails);
        resultToReturn = this.RedirectToAction(x => x.Index());
    }
    catch (RulesException e)
    {
        e.AddModelStateErrors(this.ModelState); // from xVal
        this.TempData.AddItem(newsEventsSignupDetails); // for showing invalid input
        resultToReturn = this.RedirectToAction(x => x.NewsEventsSignup());
    }

    return resultToReturn;
}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 mvccontrib modelstate


    【解决方案1】:

    如何检查 ModelState 是否未填充?这是一个 OnActionExecuted 过滤器,因此仅在操作完成时才填充。您无法检查操作中的值。

    验证 ModelState 是否确实存在错误的最简单方法是将验证摘要放在视图上。

    要查看您的错误与 xval 无关,我会尝试

    ModelState.AddModelError("TestError", "This is an errortest");
    

    重定向前在 NewsEventsSignup 中。

    也不要尝试在调试器或某些调试代码中访问 TempData。首次访问时会被删除。

    【讨论】:

    • 我不知道这是一个 OnActionExecuted 过滤器。验证摘要揭示了真相。我没有设置输入或字段验证错误类,因为我的错误出现在“.Name”和“.Email”而不是“Name”和“Email”上,这是输入字段的名称/ID。奇怪的。不知道为什么。正在插入。否则,似乎一切正常。
    • 我自己刚刚遇到了这个问题,感谢 Malcolm 和 Chris F 发布这个问题!
    猜你喜欢
    • 2019-02-19
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多