突然发现 ViewState,Linq 水火不容
2010-04-11 22:59 贺臣 阅读(3343) 评论(48) 编辑 收藏 举报刚才在写一个小东西,突然发现一个问题。很奇怪,希望大家能帮忙解决一下
我用WebForm+Linq 做一个小网站,在读取数据的时候,我想将Linq 读取出来的泛型集合缓存起来。大家自然想到asp.net中的几个内置对象来存储。其实我也是这样想的。页面内部ViewState 最适合不过了。但是问题出现了。
这个linq 查询出来的数据竟然和ViewState 水火不容,Linq查询出的结果集竟然不能存入到ViewState 中。
存储代码如下:
代码
2 {
3 if (ViewState["listServer"] != null)
4 {
5 listServer = ViewState["listServer"] as IList<TabGameLink>;
6 }
7 else
8 {
9 TabGameLinkDAL access = new TabGameLinkDAL();
10 listServer = access.GetTabGameLinkList(4, 1);
11 if (listServer == null)
12 {
13 listServer = new List<TabGameLink>();
14 }
15 //ViewState["listServer"] = listServer;
16 Session["listServer"] = listServer;
17 }
18 }
上面的代码我已经使用session 来存储了,后台的Linq 查询方式如下:

{
eBrainWebDbDataContext context = new eBrainWebDbDataContext(Conn);
return context.TabGameLink.Where(l => l.GameID == gameID && l.TypeID == typeID).OrderByDescending(l => l.CreateTime).ToList<TabGameLink>();
}
自己分析了一下上面的问题:
(1)上面的错误是"System.Data.Linq.ChangeTracker..... 未标记为可序列化" ,标记为不可序列化,但是默认情况Linq 生存的实体是可以序列化的。假设不能序列化,但是我已经手动给实体加了[Serializable],按照道理应该不会出现这样的问题。
(2) 以前记得ViewState 中存储List<T> 集合似乎是没有问题的,而且自己刚才也试过了,是没有问题的。偏偏Linq 查询的结果就不能存入到ViewState中。是ViewState 对Linq 有偏见,真是这样那么微软对他们的关系就没有调节好了,可以算得上是一个bug了。
就是不明白ViewState 的存储数据的原理,导致他们水火不容。希望大家帮帮忙,看看这两个家伙是咋回事。你看Session存储就偏偏没事,但是我们不能说总用Session来存储吧,我只是单个页面存储,不需要跨页面。大家有什么解决办法,留个言。帮我解决一下
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架