我有一个 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 Server。
在我将会话迁移到状态服务器后 -
web.config -
<system.web> ...
<sessionState timeout="180" mode="StateServer" cookieless="UseCookies" />
...
我的一些存储自定义对象的会话开始出现“无法序列化”错误。我已经制作了这样的对象[Serializable]来解决这个问题。但现在我坚持使用上述 PRG 模式!
错误- 程序集“System.Web.Mvc,版本=3.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35”中的类型“System.Web.Mvc.ViewDataDictionary”未标记为可序列化。
奇怪的是,我找不到一个可以分享我的场景的线程。任何人?