ASP.NET MVC 2.0
Я делаю Post-Redirect-Get, если я получаю ошибки на сообщении, я должен включать ModelErrors вперед для поездки к вдоль маршрута-Redirect-Get. Я отправляю его через 'TempData':
TempData["modelErors"] =
ModelState.
Where(item => item.Value.Errors.Count > 0).
ToDictionary(
item => item.Key,
item => item.Value.Errors.Select(error=>error.ErrorMessage).ToList()
);
И затем повторно вставьте его в ModelState:
if (TempData.ContainsKey("modelErors")) {
foreach (var errors in (IDictionary<string,IList<string>>) TempData["modelErors"]) {
foreach (var error in errors.Value) {
ModelState.AddModelError(errors.Key, error);
}
}
}
Существует ли лучший путь?
Вам действительно следует делать PRG только после успешного сообщения. В противном случае можно возвращаться из сообщения, если произошла ошибка.
В противном случае вам нужно использовать cookies, переменные сессии или переменные запроса, чтобы сохранить эту информацию для следующего запроса.
В ASP.NET MVC2 по умолчанию, я думаю, TempData использует состояние сессии для хранения информации для следующего запроса.