Добавить ошибку состояния модели и проверить после перенаправления на действие

У меня есть вопрос о ModelState и сообщениях об ошибках проверки в MVC3. У меня есть в моем реестре представление @Html.ValidationSummary(false), которое показывает мне сообщения об ошибках DataAnnotations из моего объекта модели. Затем ... в моем контроллере действий Register у меня есть ModelState.IsValid, но внутри этого if(ModelState.IsValid) у меня есть другие элементы управления ошибками, которые добавляются к состоянию модели с помощью ModelState.AddModelError(string.Empty, "error..."), а затем я делаю RedirectToAction, но сообщения, добавленные в ModelState, вообще не отображаются.

Почему это происходит?


person Phoenix_uy    schedule 30.12.2011    source источник


Ответы (1)


а затем я делаю RedirectToAction

Это твоя проблема. При перенаправлении значения состояния модели теряются. Значения, добавленные в состояние модели (включая сообщения об ошибках), сохраняются только в течение времени существования текущего запроса. Если вы перенаправляете это новый запрос, поэтому состояние модели теряется. Обычный поток действий POST следующий:

[HttpPost]
public ActionResult Foo(MyViewModel model)
{
    if (!ModelState.IsValid)
    {
        // there were some validation errors => we redisplay the view
        // in order to show the errors to the user so that he can fix them
        return View(model);
    }

    // at this stage the model is valid => we can process it 
    // and redirect to a success action
    return RedirectToAction("Success");
}
person Darin Dimitrov    schedule 30.12.2011
comment
Ммм... так.. мне нужно сделать возврат View()?.. но представление находится в другом контроллере.. (да, я знаю, может быть, это неправильно... но на данный момент я думаю, что у меня нет пора менять :С) - person Phoenix_uy; 30.12.2011
comment
@Phoenix_uy Для быстрого исправления добавьте представление в общий каталог, поскольку оно предназначено специально для совместного использования представлений несколькими контроллерами. - person Jesse; 30.12.2011