и затем я выполняю 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");
}