毕业设计网
开发环境 |

ASP.NET ViewState

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 页面中必须有一个服务器端窗体标记 (
 
).窗体字段是必需的,这样包含 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 .
 
      我们都知道asp.net的服务端控件在呈现到浏览器的时候生成的代码还是HTML代码,但为何它就行保存上次输入的值呢? 
      在设计的时候我们写一句,但在页面代码中我们会看到但还看到 
      同样的代码,我只是把TextBox给一个初始化数据,在页面代码中会看到和 
      看了这两次生成的代码没什么变化,只是输入框的值变了,在浏览器中输入值后,回传了一次后代码也只是输入框的value改变了。 
      在没有深入了解asp.net服务端控件的生成及其值的保存前,就以为它的值就只靠value属性,但后来发现没那么简单。每个控件的值都会保存到ViewState中。(这里我就不说太多有关ViewState了,因为自己研究得还不够深入,怕说错了) 
      在项目开发中,我们经常用到日历控件,但服务端的日历控件要回传,刷新界面,这给用户使用感觉很不好,在网上有很多Js日历控件,直接可以使用的,但我们经常是不给用户手动输入,只能选择,在代码设计时一般是写没给它一个初始日期,它的值通过JS来填充的。当我们点击提交的时候,总得不到它的值,都是空串,就算是给了初始化日期,在浏览器中已经改变它的值,但提交到cs代码中,日期还是初始化的那个,这是怎么回来呢? 
      把输入框设为只读后,也就只有后台cs代码才能修改这个输入的ViewState的值了。 
      我们可以通过HiddenField代替它,在JS中修改输入框的值的同时也把它的值给一份给HiddenField,在后台的cs代码直接取得HiddenField的值就可了。这是个投机取巧的方法,在很多时候我们用JS在界面做的一些值的修改,回到cs代码里都得不到自己要得到的值,因为JS没有直接修改到ViewState,我们只能通过这些小方法得到。 

以上是一部分介绍,如需要完整的资料或者如不符合您的要求,请联系技术人员qq:242219979咨询

上一篇:ASP.NET几种括尖括号+百分号用法区别简介
下一篇:asp.net中前台javascript与后台c#相互调用


版权所有 毕业设计网联系qq:242219979 © 2007-2022