代码之家  ›  专栏  ›  技术社区  ›  Chris F

为什么来自mvcontrib的modelStateToEmpData属性不工作?

  •  1
  • Chris F  · 技术社区  · 16 年前

    为了验证目的,我只是在同一个控制器中将ModelState从一个操作传递到另一个操作。但是,模型状态不会得到更新。我看到tempdata[“uuuuuu mvcontrib”validationfailures_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu]包含来自转发操作的ModelStateDictionary,但我假设这应该自动转移到我当前的ModelState中?我哪里出错了?

    我使用的是ASP.NET MVC2和MVCContrib 2.0.36.0。我还尝试用这个属性来修饰控制器,但是结果是相同的。

    代码:

    [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;
    }
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Mathias F    16 年前

    如何检查模型状态是否未填充?这是一个OnActionExecuted筛选器,因此只有在操作完成时才会填充它。不能检查操作中的值。

    验证ModelState区域是否有错误的最简单方法是在视图上放置验证摘要。

    为了确保您的错误与XVAL无关,我将尝试

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

    在重新定向之前在newsEventsSignup中。

    也不要尝试在调试器或某些调试代码中访问tempdata。当您第一次访问它时,它就会被删除。