У меня есть веб-приложение MVC3. В этом я использовал шаблон PRG (Post-Redirect-Get). То есть во время обратной передачи, если какая-либо проверка модели не удалась, я сохраняю ViewData в TempData и затем перенаправить на исходное действие GET.
В пост действия -
if (!ModelState.IsValid)
TempData["ViewData"] = ViewData;
Позже в действии GET -
if (TempData["ViewData"] != null)
ViewData = (ViewDataDictionary)TempData["ViewData"];
Это почти обычная практика. Все работает нормально до настоящего времени. Теперь нам нужно улучшить постоянство сеанса, то есть нам нужны "более длинные" сеансы. Я решил использовать ASP.Net State Сервер.
После того, как я перенес свою сессию на State Server -
web.config -
<system.web> ...
<sessionState timeout="180" mode="StateServer" cookieless="UseCookies" />
...
Я начал получать ошибки «невозможно сериализовать» для некоторых моих сеансов, в которых хранились пользовательские объекты. Я создал такие объекты [Serializable], которые решили проблему. Но теперь я застрял в приведенном выше шаблоне PRG!
Ошибка. Тип «System.Web.Mvc.ViewDataDictionary» в сборке «System.Web.Mvc, версия = 3.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35» не помечен как сериализуемый.
Странно, я не могу найти ни одной темы, которая разделяет мой сценарий. Кто-нибудь?