ASP.NET开发过程中使用ViewState的使用

来源:互联网 发布:临崖天际知何路 编辑:程序博客网 时间:2024/05/19 18:37

在自定义控件类中,通常会因为需要,建立属性。

由于HTTP请求完成之后会断开连接,从而会把属性保存到私有变量中,因此不会满足我们的要求,即在提交回发时会重新生成自定义控件类,还有可能丢失属性值。所以保存到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属性

Public int PageCount

{

get{return(int)ViewState["PageCount"];}

set{ViewState["PageCount"]=value;}

}

使用ViewState的条件

如果要使用ViewState,则在ASPX页面中必须有一个服务器端窗体标记(<formrunat=server>).窗体字段是必需的,这样包含ViewState信息的隐藏字段才能回传给服务器.而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET页面框架才能添加隐藏的字段.

Page的EnableViewState属性值为true.

控件的EnableViewState属性值为true.

提醒:

1.当存在页面回传时,不需要维持控件的值就要把ViewState禁止.

2.ViewState的索引是大小写敏感的.

3.ViewState不是跨页面的.

4.为了能包存在ViewState中,对象必须是可流化或者定义了TypeConverter.

5.控件TextBox的TextMode属性设置为Password时,它的状态将不会被保存在ViewState中,这应该是出于安全性的考虑.

6.在页面没有回传或重定向或在回传中转到(transfer)其他页面时不要使用ViewState.

7.在动态建立控件时要小心它的ViewState.

8.当禁止一个程序的ViewState时,这个程序的所有页面的ViewState也被禁止了.

9.只有当页面回传自身时ViewState才是持续的.

设置ViewState

ViewState可以在控件,页,程序,全局配置中设置.缺省情况下EnableViewState为true.如果要禁止所有页面ViewState功能,可以在程序配置中把EnableViewState设为false.


使用viewstate会增加页面html的输出量,占用更都的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值.

原创粉丝点击