突然发现 ViewState,Linq 水火不容

刚才在写一个小东西,突然发现一个问题。很奇怪,希望大家能帮忙解决一下

 

我用WebForm+Linq 做一个小网站,在读取数据的时候,我想将Linq 读取出来的泛型集合缓存起来。大家自然想到asp.net中的几个内置对象来存储。其实我也是这样想的。页面内部ViewState 最适合不过了。但是问题出现了。

 

 

这个linq 查询出来的数据竟然和ViewState 水火不容,Linq查询出的结果集竟然不能存入到ViewState 中。

存储代码如下:

代码

 1 public void SetGameServer()
 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 查询方式如下:

代码

public IList<TabGameLink> GetTabGameLinkList(int gameID, int typeID)
        {
            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来存储吧,我只是单个页面存储,不需要跨页面。大家有什么解决办法,留个言。帮我解决一下

 

 

时间: 2024-10-01 07:25:10

突然发现 ViewState,Linq 水火不容的相关文章

互联网字幕组现新变化 或不再与版权方水火不容

如果你是一个美剧迷或者日本动漫迷,你一定知道传说中的"追剧神器"――字幕组,不过字幕组不是一种程序或软件,而是一群人.当一轮又一轮的互联网热潮过后,字幕组发生了哪些变化,它又给互联网文化和整个世界带来了什么? 如果你是一个美剧迷或者日本动漫迷,你一定知道传说中的"追剧神器"――字幕组,不过字幕组不是一种程序或软件,而是一群人.随着越来越多的外国影视剧进入中国,语言与文化的障碍成为中国观众欣赏这些作品的最大问题,于是一批具备较高翻译水平的青年自告奋勇地担当起"

苹果高管动荡原因:两员大将福斯特尔与艾维水火不容

http://www.aliyun.com/zixun/aggregation/17197.html">北京时间11月06日消息,苹果公司近日经历高层人事动荡,确认由工业设计高级副总裁艾维接手iOS软件部门主管.据国际科技资讯网站BGR报道,原iOS软件部门负责人福斯特尔与苹果首席设计师艾维"水火不容",曾多次故意缺席对方私人会议,而苹果已故联合创始人乔布斯也曾多次居中协调两人关系. BRG指出,福斯特尔与艾维的关系已经到了"不共戴天"的地步,甚至拒

奢侈品与电商真的水火不容?电商真的只能是屌丝们的天下?

2010年是奢侈品电商最热的年份,然而自2011年始,假货盛行促使很多奢侈品电商网站裁员.关闭或转型,今年5月份,尊享网旗下的所有网站已经处于关闭状态,当年打着"尊享网只为一部分人服务",只做高端用户,上线一个月就获得赛富投资的奢侈品电商尊享网也失声了. 难道奢侈品与电商真的水火不容?聚美优品转型中低端市场之后,反而上市,电商真的只能是屌丝们的天下?安然看不然,奢侈品电商激进之后急转向下,找到合适模式的网站却还在行进. 近几年来奢侈品电商的发展形态是,倒闭.调整与转型. 奢侈品电商的两

第二台电视百万瓶颈:IPTV数字电视水火不容

黄婕 上海报道 对于低迷的全球IT业,以下几则信息,或许多少能够刺激业者的神经. 旨在为全球52个国家的付费电视和移动电视发展情况提供竞争信息的电信调研机构Pyramid Research近期公布了第一季度最新<Media Forecast>(媒体预测报告).该报告显示,尽管经济环境充满挑战,但预计2009年全球付费电视用户将增长8%,达到近7.33亿. 报告公布同时,韩国和美国均传来消息.韩国通信委员会(KCC)已经发牌给3家IPTV运营商KT.SK Broadband和LG Dacom,许

SEO推广与社会化媒体已经搞得水火不容?

中介交易 SEO诊断 淘宝客 云主机 技术大厅 在进入2010年一段时间之后,社会化媒体有一夜春风的感觉,一下子就火了.进入2011年,社会化媒 体影响到了整个互联网的格局,包括搜索引擎,包括我们站长最关心的网站优化与网络营销.在此之前,SEO一直是网络市场营销的最主流的手段与ppc广告互 为犄角之势.而采用SEO来优化你的网站,以获得从搜索引擎未来的流量,几乎零成本,低风险的方式占据了大量的草根基础,在做SEO之后站长从而赢得自己 网站的推广以及可观的回报. 近年从全球范围内来看,诸如Face

水火不容!微软禁将谷歌设为新款Lumia默认搜索

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 [摘要]此前,诺基亚设备支持Windows Phone用户更换谷歌搜索. 腾讯科技讯 微软日前对旗下部分新Lumia机型搜索设置进行调整,禁止将谷歌(微博)设为默认搜索引擎.不过通过WP8版本的IE浏览器高级设置,在售绝大部分Lumia机型仍可将谷歌设置为默认搜索. 手机厂商和运营商掌握自家设备默认搜索引擎设置决定大全,此前,诺基亚设备支持W

虚拟化对决本机应用:两者水火不容?

大约一年前,一些大规模的虚拟化软件厂商(诸如VMware 和CA Technologies公司)开始和他们称之为虚拟化停滞的现象做斗争. 按照他们的预测,规模最大的企业用户在他们的虚拟化计划上还有更长的路要走.许多企业用户都在享受虚拟化产出的回报,比如通过服务器整合提高了效率,将他们的虚拟工作负载从一台服务器迁移到另一台服务器的灵活性有所提升等. 但是很多尝试虚拟化的早期用户在虚拟化的初期战果被采摘殆尽后开始进入停滞阶段,那些易于虚拟化的应用软件只应用在了小范围的系统上.行业专家预测大约20%到

从sql走向linq的问题

A left (outer) join B on A.bid=B.id 上面这句话叫做左连接,原因是left(左)join(加入,连入)被译为左连接,所以,这是关于语法中关键字的翻译,而非连接原理,造成不能以为是从第一张表的左边连接.相反,它是从A表的右边开始连接的.原因很简单,比如一个普通的查询语句:select t.id TID from table1 t.后面的那个t是对table1的标记,再看TID它也是对t.id的标记,它们的功能是什么我们暂且不说,起码我们知道了sql的语法习惯是将附

测试运行: 使用LINQ测试SQL存储过程

对访问和操作后端 SQL Server 数据库的程序进行测试十分常见.在此类情况中,应用程序基本都是通过使用 SQL 存储过程来与后端数据进行交互的.此时,可将存储过程看作待测试系统的辅助方法:因此也必须像系统中的任何其他模块一样测试它们. 尽管在测试 SQL 存储过程时可使用的方法有很多,但我发现使用 LINQ 可极大地简化测试自动化.在本月的专栏中,我将向您展示如何使用 LINQ(尤其是使用 LINQ to SQL 提供程序)来测试 SQL 存储过程.我将假定您的 C# 和 SQL 技能属于