<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTcwMzQ4Mzg3Nw9kFgICAw9kFgwCBQ8WAh4JaW5uZXJodG1sBUU8dGFibGUgY2xhc3M9InhpbmZ1X3RhYmxlIiAgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4gPC90YWJsZT5kAgcPFgIfAAWmATx0YWJsZSBjbGFzcz0ieGluZnVfdGFibGUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+PHRyPjx0aCAgY2xhc3M9InRkX2giPuaXtiDpl7Q8L3RoPjx0aCAgY2xhc3M9InRkX2giPueUqCDmiLc8L3RoPjx0aCBjbGFzcz0idGRfaCIgPuekvCDlk4E8L3RoPjwvdHI+PC90YWJsZT5kAgkPFgIfAAXAATxkaXYgY2xhc3M9Inhpbndlbl9kaXYwIj48ZGl2IGNsYXNzPSJ4aW53ZW5fZGl2MSI+PC9kaXY+PGEgaWQ9IjQzIiBocmVmPSJOZXdzU2hvdy5hc3B4P2lkPTQzIiBjbGFzcz0ieGlud2VuX2JpYW90aV9hIiAgdGFyZ2V0PSJfYmxhbmsiPuKAnOS4g+WNg+a4uMK35LqS5Yqo5aix5LmQ572R4oCd6ZqG6YeN5LiK57q/77yBPC9hPjwvZGl2PmQCCw8WAh8ABRk8dWwgY2xhc3M9Ind5eXhfdWwiPjwvdWw+ZAINDxYCHwAF2QQ8dGFibGUgd2lkdGg9IjYxMHB4IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIxIiBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI0ZGOTkwMCI+PHRyIGJnY29sb3I9IiNGRkZGRkYiPjx0ZD7mjpLlkI08L3RkPjx0ZCA+55So5oi35ZCNPC90ZD48dGQgPumHkeminTwvdGQ+PC90cj48dHIgIGJnY29sb3I9IiNGRkZGRkYiID48dGQgc3R5bGU9InBhZGRpbmctdG9wOjNweDt3aWR0aDo0MnB4O2hpZ3RoOjE1cHg7YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2hvbWVwYWdlL2hwMjUuZ2lmKTt0ZXh0LWFsaWduOmNlbnRlciI+IDxzcGFuIHN0eWxlPSJjb2xvcjojRkZGRkZGIj4xPC9zcGFuPjwvdGQ+PHRkPiBzaGVuNjM3ODE1PC90ZD48dGQ+IDIwMDwvdGQ++PHRkPiA0MDA8L3RkPjwvdHI+PHRyICBiZ2NvbG9yPSIjRkZGRkZGIiA++IDxzcGFuIHN0eWxlPSJjb2xvcjojRkZGRkZGIj43PC9zcGFuPjwvdGQ+PHRkPiB3b2NhbzwvdGQ+PHRkPiAwPC90ZD48L3RyPjx0ciAgYmdjb2xvcj0iI0ZGRkZGRiIgPjx0ZCBzdHlsZT0icGFkZGluZy10b3A6M3B4O3dpZHRoOjQycHg7aGlndGg6MTVweDtiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvaG9tZXBhZ2UvaHAyNS5naWYpO3RleHQtYWxpZ246Y2VudGVyIj4gPHNwYW4gc3R5bGU9ImNvbG9yOiNGRkZGRkYiPjg8L3NwYW4+PC90ZD48dGQ+IHd3d3d3dzwvdGQ++PHRkPiBoZGZsbmVyd2w8L3RkPjx0ZD4gMDwvdGQ++PHRkPiBzaGFva3VuPC90ZD48dGQ+IDA8L3RkPjwvdHI+PC90YWJsZT5kGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYGBQVzZXhfYgUFc2V4X2cFBXNleF9nBQd4Z19zZXhiBQd4Z19zZXhnBQd4Z19zZXhnNKrdl6sQHxRj1SsLndlTWnOygVE=" />我查看 我自己的写的一个网页的 源文件时,发现源文件中多出了这些代码。但是我的这个页面程序中并没有用到viewstate啊,然后我看了一些其他的asp.net的网站,发现其他的这些网站的源文件中 也有1-3个viewstate,但是都很短!我的怎么会这么长啊。。希望有人能够解答!

解决方案 »

  1.   

    ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制参考:
    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的条件 
    如果要使用 ViewState,则在 ASPX 页面中必须有一个服务器端窗体标记 (<form runat=server>)。窗体字段是必需的,这样包含 ViewState 信息的隐藏字段才能回传给服务器。而且,该窗体还必须是服务器端的窗体,这样在服务器上执行该页面时,ASP.NET 页面框架才能添加隐藏的字段。 
    Page 的 EnableViewState 属性值为 true。 
    控件的 EnableViewState 属性值为 true。 页面本身将 20 字节左右的信息保存在 ViewState 中,用于在回传时将 PostBack 数据和 ViewState 值分发给正确的控件。因此,即使该页面或应用程序禁用了 ViewState,仍可以在 ViewState 中看到少量的剩余字节。 设置ViewState ViewState可以在控件,页,程序,全局配置中设置。缺省情况下 EnableViewState 为 true 。如果要禁止所有页面 ViewState 功能,可以在程序配置中把 EnableViewState 设为 false 。 
    在控件中: <asp:DataGridEnableViewState="false"%> 
    或 DataGrid1.EnableViewState= false; 
    在页中: <%@ PageEnableViewState="false" %> 
    或 Page.EnableViewState= false; 
    在程序中: 在web.config中加入 <pages enableViewState="false" /> 
    在全局配置: 在machine.config中修改 <pages enableViewState="false" /> EnableViewState优先级别: 
    全局配置 < 程序 < 页< 控件 注意:下列服务器控件不能禁止ViewState Textbox 
    Checkbox 
    Checkbox List 
    RadioButtonList 
    上面控件的状态通过IPostBackEventHandler 和 IPostBackDataHandler接口处理,而不是ViewState的机制,所以EnableViewState没有效果。 ViewState对象 在页面回传间通信,ASP中一般利用窗体的属性和 session 来存放数据,在 ASP.NET 中也可以使用 ViewState 对象来做同样的处理。 
    在ViewState存放数据: ViewState[key]= value; 
    或 ViewState.Add(key,value); 
    取出数据: TempStr =ViewState[key]; 
    key不存在时返回空。 不能通过ViewState对象来访问控件的值。 动态建立控件的ViewState: 当需要动态地建立一个服务器控件,如下建立了一个 RadioButton 控件并加入到窗体控件集合中: RadioButton rb = new RadioButton(); 
    Page.Controls[1].Controls.Add(pc); 
    上面的代码增加一个控件到控件集合末,同样也可以插入到已有控件中的任何位置。 RadioButton rb = new RadioButton(); 
    Page.Controls[1].Controls.AddAt(1,pc); 通常,这些动态生成的控件的状态也需要生成到 ViewState 中去,但这个功能并没有完全实现,特别是生成的控件插入到已有的控件中时。 
    当动态生成控件和已有控件并存时 ViewState 的结果是不可预料的。在页面回传时,首先非动态生成的控件在ASPX页中被生成,并在 Page_Init 和 Page_Load 事件中读取 ViewState。当页面的控件读取 ViewState 的值时,那些动态生成的控件却还没有被生成,所以当动态生成的控件被 
    生成时,页面就会省略掉ViewState或者以剩下或许错误的 ViewState 来填充控件。 所以,当需要插一个动态生成的控件到已有控件中去时,最好把这个控件的 ViewState 通过EnableViewState禁止掉。 提醒: 
    1. 当存在页面回传时,不需要维持控件的值就要把 ViewState 禁止。 
    2. ViewState的索引是大小写敏感的。 
    3. ViewState不是跨页面的。 
    4. 为了能包存在 ViewState 中,对象必须是可流化或者定义了 TypeConverter。 
    5. 控件 TextBox 的 TextMode 属性设置为 Password时,它的状态将不会被保存在 ViewState 中,这应该是出于安全性的考虑。 
    6. 在页面没有回传 或 重定向 或 在回传中转到(transfer)其他页面时不要使用 ViewState。 
    7. 在动态建立控件时要小心它的 ViewState。 
    8. 当禁止一个程序的 ViewState 时,这个程序的所有页面的 ViewState 也被禁止了。 
    9. 只有当页面回传自身时ViewState 才是持续的。