Почему не работает атрибут ModelStateToTempData из MVCContrib? - PullRequest
1 голос
/ 21 июня 2010

Я просто пытаюсь передать ModelState от одного действия другому в том же контроллере в целях проверки.Тем не менее, состояние модели не обновляется.Я вижу, что TempData ["____ MvcContrib_ValidationFailures____"] содержит 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 Ответ

1 голос
/ 22 июня 2010

Как проверить, что ModelState не заполнен?Это фильтр OnActionExecuted, поэтому он заполняется только после завершения действия.Вы не можете проверить значение в действии.

Самый простой способ проверить наличие ошибки ModelState - это поместить в представление сводку проверки.

Чтобы увидеть, что ваша ошибкане относящийся к xval Я бы попробовал

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

в NewsEventsSignup перед перенаправлением.

Также не пытайтесь получить доступ к TempData в отладчике или в некотором отладочном коде.Он удаляется при первом обращении к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...