了解ViewState的回传机制

本文详细介绍了ASP.NET中ViewState的工作原理及其使用方式。ViewState是ASP.NET用于保持Web控件状态的一种机制,通过序列化控件状态并将其存储在隐藏字段中实现。文章还探讨了如何在不同层级设置ViewState以及其注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    ViewState是ASP.NET中用来保存web控件回传时的状态值的一种机制。在web窗体(Form)的设置为runat="server",这个窗体会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。ViewState是类Control中的一个域,其他所有控件通过继承Control来获得ViewState功能。它的类型是System.Web.UI.StateBag,一个名称/值的对象集合。当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后作为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值。当然这些全部都是由ASP.NET负责,对用户来说是透明的。

    如果要使用ViewState,则在aspx页面中必须有一个服务器端窗体标志(form runat="server")。窗体字段是必需的,这样包含ViewState信息的隐藏字段才能回传给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET页面框架才能添加隐藏的字段。Page的EnableViewState属性值为true。控件的EnableViewState属性值为true。页面本身将20字节左右的信息保存在ViewState中,用于在回传时将postBack数据和ViewState值分发给正确的控件。因此,即使该项页面或应用程序禁用了ViewSTate,仍可以在ViewState中看到少量的剩余字节。

    ViewState可以在控件、页面、程序及全局配置文件中设置。默认情况下EnableViewState为true。如果要禁止所有页面ViewState功能,可以程序配置中把EnableVewState设为false。在控件中,可以通过设置控件的enableViewState的属性来设置ViewState。在页面中可以通过<%PageEnableViewState="false"%>或Page.EnableViewState=false配置ViewState。

在全局配置中可以在配置文件中修改<pages enbleViewState="false"/>。

    ViewState存放位置的优先级别:全局配置<程序<页<控件。

    对ViewState需要注意以下一些规则:

 

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

    2、ViewState的索引是大小写第三的,而且ViewState 不是跨页面的。

    3、为了能保存在ViewState中,对象必须是可以序列化的或者定义了typeConverter。

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

    5、在页面没有回传、重定向,或在回传中转到(transfer)其它页时,不要使用ViewState。

    6、在动态建立控件时要小心它的ViewState。

    7、当禁止一个程序的ViewState时,这个程序的所有页面的ViewState也会被禁止。只有当页面回传自身时ViewState才是持续的。

 

并不是所有控件都可以设置ViewState为False的,TextBox,Checkbox,CheckboxList,RadioButtonList控件的状态通过IPostBaskEventHandler和IPostBackDataHandler接口处理,而不是ViewState的机制,所以设置EnableViewState没有效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值