VS2015
Cache有3种过期策略。第一种:没有时间限制。Cache.Add(key,value)或者Cache.Insert(key,value);不加任何时间限制,增加的数据是不会过期的。Add方法重复键值是不会在增加的,Insert数据是会覆盖重复的键值。
第一种情况,间隔后台刷新多次,仍能取到值。C#aspx的后台Pageload方法给Repeater控件赋值DataTable。DataTable的获取从Cache里面。
if (Session['wwewew'] == null || Session['wwewew'].ToString() == '') { Session['wwewew'] = wwewe; if (!string.IsNullOrEmpty(wwewe) && wwewe == '1') { DataTable ds = new DataTable(); DataRow deru = ds.NewRow(); DataColumn qwkop = new DataColumn(); qwkop.ColumnName = '1'; ds.Columns.Add(qwkop); DataColumn qwkopq = new DataColumn(); qwkopq.ColumnName = '2'; ds.Columns.Add(qwkopq); DataColumn qwkopr = new DataColumn(); qwkopr.ColumnName = '3'; ds.Columns.Add(qwkopr); deru[0] = '1'; deru[1] = '2'; deru[2] = '3'; ds.Rows.Add(deru); Cache.Insert('Data', ds); }
第二种情况,隔断时间过期,过10秒后再刷新页面就取不到值了。 else if (!string.IsNullOrEmpty(wwewe) && wwewe == '2') { DataTable ds = new DataTable(); DataRow deru = ds.NewRow(); DataColumn qwkop = new DataColumn(); qwkop.ColumnName = '1'; ds.Columns.Add(qwkop); DataColumn qwkopq = new DataColumn(); qwkopq.ColumnName = '2'; ds.Columns.Add(qwkopq); DataColumn qwkopr = new DataColumn(); qwkopr.ColumnName = '3'; ds.Columns.Add(qwkopr); deru[0] = '33'; deru[1] = '45'; deru[2] = '66'; ds.Rows.Add(deru); Cache.Insert('Data', ds, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero); }
第三种情况,连续过10秒没有访问这个键值就过期,后台取不到值了。 else if (!string.IsNullOrEmpty(wwewe) && wwewe == '3') { DataTable ds = new DataTable(); DataRow deru = ds.NewRow(); DataColumn qwkop = new DataColumn(); qwkop.ColumnName = '1'; ds.Columns.Add(qwkop); DataColumn qwkopq = new DataColumn(); qwkopq.ColumnName = '2'; ds.Columns.Add(qwkopq); DataColumn qwkopr = new DataColumn(); qwkopr.ColumnName = '3'; ds.Columns.Add(qwkopr); deru[0] = '7'; deru[1] = '8'; deru[2] = '9'; ds.Rows.Add(deru); Cache.Insert('Data', ds, null, DateTime.MaxValue, TimeSpan.FromSeconds(10)); }
前端页面:
<%#Eval('1')%> | <%#Eval('2')%> | <%#Eval('3')%> |
刷新后会重复提交表单,进入Page_Load方法,文本框的值还会保留上一次的输入
所以用Session 保存Form提交的值,如果上一次是这个值,就不z在给DataTable
赋值,直接从Cache取值