WebForm 基础3 ViewState

ViewState:

之前讲过HttpHandler是无状态的,aspx是高级的HttpHandler,所以同样是
无状态的,在aspx.cs中一般也不要用类字段。那么如果确实需要存储一些页面
相关的变量怎么办呢?比如点击按钮“点击次数”加1。

示例:

在页面上放一个Button和一个Label,然后给Button添加一个事件,代码如下:

protected void Button1_Click(object sender, EventArgs e)
        {
            object objNum = this.ViewState["num"]; 
            if (objNum != null)
            {
                int num = Convert.ToInt32(objNum.ToString());
                num++;
                this.ViewState["num"] = num;
            }
            else
            {
                objNum = "1";
                this.ViewState["num"] = objNum;
            }
            this.Label1.Text = objNum.ToString();
        }
这样,每次点击按钮,Label1的文本都会加1。

什么原理?
查看页面的__VIEWSTATE,它是一个隐藏的input,使用ViewStateDecoder2.0.exe查看
input的value值,发现其中有“点击次数num”对应的值。每次页面渲染生成html的时候,
asp.net把ViewState中的值进行编码处理(Base64)序列化为__VIEWSTATE这样一个隐藏字段
放到html中,下次再次提交的时候把__VIEWSTATE的值提交,服务器把__VIEWSTATE的值反序列化
填充到ViewState属性中。其实就是把浏览器端当成“数据暂存”场所。


除了ViewState属性,还有哪些数据会放到__VIEWSTATE中?

所有在cs代码中修改的值,
比如给DataSource赋值的,比如Label的Text是没有放到__VIEWSTATE的,但是代码中
给Text属性赋值就会被放到__VIEWSTATE
中了。所以__VIEWSTATE是用来盛放“本次修改的内容”
供“下次请求”还原现场使用,把Http模拟成了有状态。


禁用ViewState:
Repeater在绑定数据时,ASP.NET会在ViewState存放太多的内容,占用服务器很多的带宽资源,页面响应速度也慢。
ViewState是可以被禁用的(页面EnableViewState="false"),这样客户端只会保留基本的__VIEWSTATE。

控件单独设置EnableViewState=false,禁用控件的ViewState。

要想完全禁用ViewState要去掉form的runat=server,大部分服务器控件就都用不了了。

禁用原则:


什么时候可以禁用ViewState:当数据不需要“下次”使用的时候,就可以禁用。

先禁用,实在不行再启用。没有非要ViewState才能干成的事。





转载自:传智播客   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值