点击这里给我发消息
点击这里给我发消息
¥1891.00元
智超淘宝店
aspx页面存值
原创
文章标签 ASP.Net

把List数据源绑定到DataList1.DataSource之后,页面回传之后,DataList1.DataSource的值将会为null。

尝试了很久,也无法直接从DataList1控件中取到T的实例,如果知道的朋友,请不吝赐教。就不用使用以下的方法了。

对于页面存值,有好几种方法:

Context.Items["CSData"] = "Hello World";//可用Context字典来存储信息, Transfer到新的页面后,首次加载新页面时,可以获取Context字典信息.页面回传后,Context.Items["CSData"]值将为空
Context.Items["CSData"] = m_DS;// Context 可保存任意数据类型,Context字典特定于某个Http请求,对于不同客户端,值不一样

Application["CSData"] = m_DS;//Application可保存任何数据类型,对所有客户端有同样值,整个应用程序范围内有效

Session["CSData"] = m_DS;// Session可以保存任意的object类型,对不同客户端不同值

HttpCookie m_Cookie = new HttpCookie("CSData","Hello World");  //cookie存储在客户端,只能保存字符串,对不同客户端有不同值    
Response.Cookies.Add(m_Cookie);     

这时的需求是:值保存在客户端,不同客户端不同值。以上都不满足要求。

也有说用隐藏控件来存值的,但不像Winform一样,控件有tag属性,隐藏控件也无法保存object类型的对象。

直到遇到ViewState,问题才得以解决

----------------分割线----------------分割线----------------分割线----------------

使用方法
怎么在客户端,存取ViewState?
应用环境
一些与安全性无关,数据量较小,需要长时间操作的参数,应该用ViewState存取。
在webgis中,地图的各种相关状态,如zoom, center, layers, visibility等,用viewstate存取的话,就不存在session过期的问题,网页可以永远使用,甚至可以下载保存,在进行地图请求,或iframe到第三方的应用中。

Asp.net中的ViewState用法   

   昨天看到一个文章,作者在自己的页面中定义了几个全局变量,类型是static,但是这样的定义会存在问题,当一个用户访问的时候不会有问题,但是当大量用户并发访问系统的时候,页面中的这些static类型的全局变量就会出现问题了,然后作者改用了Session变量保存以前由static类型全局变量纪录的数据,因为Session是状态量,只是和某个访问进程相关,这样就不会出现由于static类型引起的问题了。
 但是这样的话系统中的Session就太多了,我总认为这样不太好,虽然每个一个Session都有一个ID不会冲突。ASP.NET引入了ViewState,可以记录同一个页面的不同PostBack中的一些数据值。
所以我的解决方法是:使用例如ViewState["name"]这样的形式记录以前static的全局变量,这样就可以避免这个问题了,因为我的系统是在局域网使用的,ViewState带来的多余的数据量可以忽略不计了。
asp.net ViewState用法:
ASP.NET中的ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制.在WEB窗体(FORM)的设置为runat="server",这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE._VIEWSTATE中存放了所有控件在ViewState中的状态值.
ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能.它的类型是system.Web.UI.StateBag,一个名称/值的对象集合.
当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端.当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值.当然这些全部是由ASP.NET负责的.

其他考虑
当然,任何事物都有两面性, 使用viewstate会增加页面html的输出量,占用更都的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值.
其实,对于viewstate的安全性问题,asp.net还给我们提供了更多的选择.一般如果要保护viewstate有两种方式: 一种是防篡改,一种是加密. 一说到防篡改,我们就想起了使用散列代码. 没错, 我们可以在页面顶部加入如下代码:

<%@ Page EnableViewStateMac="true" %>

这样asp.net就会自动的在viewstate中追加一个散列码,在页面回传时,服务器根据回传的viewstate生成一个散列码,再与回传的散列码相比较,如果不对,则丢弃该viewstate,同时控件将恢复初试状态. (默认情况下asp.net是通过SHA1算法而不是md5算法来生成散列,不过这个可以在machine.config里面配置machineKey validation="MD5"即可),而viewstate加密就更简单了, 只要在machine.config里设置一下machineKey validation="3DES"即可实现用des加密viewstate了.



引用自Asp.net中的ViewState用法

----------------分割线----------------分割线----------------分割线----------------