Snowberg

 

viewstate的作用倒底是什么?

  • aspwebchh
  • (aspwebchh)
  • 等 级:
  • 结帖率:
楼主发表于:2010-07-16 01:10:03
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBwLcu/T4CgLA4sWlBwKo6+r3AQLJ9ZLmBQK5u6CKDwLy+u/iAQLbg+7IBBS0GkaH7wSVqcBtWB5O0wUg7Oyb" />


在 页面中老看到这种东西

网上查了下说是用来存放控件状态的 看了几篇文章 不太理解

viewstate倒底起着什么样作用吗?

可否举个通俗易懂的例子?
 
 
  • cjdxhc用户头像
  • cjdxhc
  • (cjdxhc)
  • 等 级:
#1楼 得分:2回复于:2010-07-16 07:31:06
一般服务器控件是默认使用viewstate的,在回发的时候可以自动保存当前填写的值。

也可以像Session那样 自己存取值,仅限于本页内使用,回发操作时可以使用!
C# code
ViewState["a"] = "dsds"; string a = ViewState["a"] as string;
 
#2楼 得分:2回复于:2010-07-16 07:57:13
http协议是无状态的连接。
那么,对于asp.net页面,如果点击一个button,激发postback产生另一个请求。
那么在处理第二个请求的时候如何知道以前的控件的状态(像textbox的值)呢?

这就用到了ViewState.它是用来维持控件对象的状态的。

如果想详细了解,最好读一下msdn的文章

Understanding ASP.NET View State
 
#3楼 得分:2回复于:2010-07-16 08:01:24
viewstate 你可以这样理解
把它看成是一全局变量 这样来理解
它是存储在页面上的 所以不能放太大值 不然会使页面体积变的很大
 
#4楼 得分:2回复于:2010-07-16 08:01:34
ViewState.它是用来维持控件对象的状态的。
 
#5楼 得分:2回复于:2010-07-16 08:49:44
基本上所有web控件都含有viewstate,viewstate的作用在于(viewstate为true时)刷新页面时,能够让页面上的数据仍能够保留下来,而不至于例如当你提交完数据后,而返回的页面却是空白的,显得那么的不和谐...
还有viewstate是基于客户端的,可以装载可序列化的对象,用法很简单,#1的用法的是对的
最后最好不要用viewstate装载太大数据的对象,这样当客户端与服务器进行交互的时候,才不至于使服务器承担太大的压力
 
#6楼 得分:2回复于:2010-07-16 08:57:37
mark...
 
#7楼 得分:2回复于:2010-07-16 09:00:42
自己去测试下

页面上放一个DropDownList,添加几项内容,再放一个Button。选中DropDownList某项后点击按钮回发,
DropDownList能保持选中项状态

然后禁用DropDownList的ViewState,再点按钮看下
 
#8楼 得分:2回复于:2010-07-16 09:23:10
页面回发时,保存页面的状态值!
 
#9楼 得分:2回复于:2010-07-16 09:31:33
引用 7 楼 amandag 的回复:

自己去测试下

页面上放一个DropDownList,添加几项内容,再放一个Button。选中DropDownList某项后点击按钮回发,
DropDownList能保持选中项状态

然后禁用DropDownList的ViewState,再点按钮看下

這個可以試 啥事得試了才知道效果
 
  • sandyxxx用户头像
  • sandyxxx
  • (一天到晚游泳的鱼)
  • 等 级:
#10楼 得分:2回复于:2010-07-16 09:34:01
就是保存页面控件状态 ,前台最好别用,影响访问速度
 
#11楼 得分:0回复于:2010-07-16 10:06:00
C# code
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableViewState="false"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> <asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem>2</asp:ListItem> <asp:ListItem>3</asp:ListItem> <asp:ListItem>4</asp:ListItem> </asp:DropDownList> <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> </form> </body> </html>


但是按照 按照高哥的意思做了

但为什么 还没保存着 droplist的状态啊

C# code
<select name="DropDownList1" id="DropDownList1"> <option value="2">2</option> <option selected="selected" value="3">3</option> <option value="4">4</option> </select>


这是返回的html
 
#12楼 得分:0回复于:2010-07-16 10:08:42
但为什么 还是保存着 droplist的状态啊
 
那个字打错了
 
#13楼 得分:2回复于:2010-07-16 10:14:21
页面级变量,占资源比session少些。只适用本页,如分页等可以用到
 
#14楼 得分:2回复于:2010-07-16 10:21:53
viewstate属于状态管理中的概念,可以存储数据状态,这样在刷新页面时就不容易丢失数据,当存储的数据比较大时会影响性能.viewstate可以从页面级,控件级或者应用程序级进行禁用
 
#15楼 得分:2回复于:2010-07-16 10:30:05
ViewState在客户端的保存形式,保存在一个ID为__VIEWSTATE的Hidden中,它的Value是使用Base64编码后的字符串。这个字符串实际上是一个对象序列化之后的结果。这个对象保存了整个页面的控件树的ViewState。可以使用一些工具将这个字符串进行解码查看其内容,比如ViewStateDecoder,ViewStateAnalyzer。
Page对客户端请求进行处理,在处理的过程中先是将客户端提交的_VIEWSTATE反序列化为对象,调用Control的相关方法给所有的控件装载数据,这些数据是上次请求结束后控件的状态数据。在请求结束之前调用Control的相关方法得到所有控件的被修改过的状态数据,之后Page将其进行序列化,并返回给客户端。在Control中又具体调用StateBag类的方法完成状态数据的加载和保存。


通过调用System.Web.UI.Control.TrackViewState()来跟踪ViewState的变化。
 
#16楼 得分:2回复于:2010-07-16 10:40:36
那是ASP.NET HiddenField 控件 在客户端的代码
像session
 
#17楼 得分:2回复于:2010-07-16 10:42:23
用于维持当前页面的状态的,以前经常用于排序,其他的功能好像没用过
 
#18楼 得分:2回复于:2010-07-16 10:44:18
viewstate页面级状态保持.作用域就整个页面........用法和session差不多
 
#19楼 得分:2回复于:2010-07-16 10:45:21
多给点分吧。嘻嘻
 
#20楼 得分:2回复于:2010-07-16 11:04:17
viewstate,让你开发网页就像开发桌面应用程序一样
但是我认为它会对你理解B/S造成困难
 
#21楼 得分:0回复于:2010-07-16 11:05:54
我认为这个放在请求头里或许会更好,如果可以的花
 
#22楼 得分:2回复于:2010-07-16 11:06:34
简单例子一个,TextBox 的 change事件

服务器端所有的事件都是通过提交表单来实现的

在服务器端将上一次的值和最新值做对比,来触发服务器端的事件,

那么上一次的值存在哪里? 存在ViewState里面,,那么ViewState存在哪里? 它是用来描术页面的历史状态

等信息,需要持久化下来,所以ViewState存在页面上,当然你重写某些方法,也可以存在数据库等地方,





 
  • zmcici用户头像
  • zmcici
  • (zmcici)
  • 等 级:
#24楼 得分:2回复于:2010-07-16 11:11:37
页面属于无状态的,要保持提交后的状态就用到了ViewState,比如说提交刷新下页面,文本框值还在,就用到了ViewState,你在试试html文本框,提交后啥都没有
 
  • journey_q用户头像
  • journey_q
  • (╰︶ ̄唯有沵)
  • 等 级:
#25楼 得分:0回复于:2010-07-16 11:11:48
如梦哥是不是老师?每次回答的那么详细感觉讲课~~~~
 
#26楼 得分:0回复于:2010-07-16 15:20:07
viewstate形象点说就是客服端和服务器端间数据传递的一个袋子,用的时候取出来,用完就放进去!
这样的原因在于服务器端不保存用户数据,每一次刷新页面客服端都要把信息再传回服务器端。还有就是viewstate中的数据是保存在客服端的。
 
#27楼 得分:0回复于:2010-07-16 15:22:24
保存状态
 
#28楼 得分:0回复于:2010-07-18 10:46:22
路过。。。
 
  • skydemo用户头像
  • skydemo
  • (北漂┅山城男儿)
  • 等 级:
#29楼 得分:0回复于:2010-07-18 11:41:01
用来存取页面的值 可以传递个需要的页面
 
#30楼 得分:0回复于:2010-07-18 11:50:50
总是迟到。。。
 
#31楼 得分:0回复于:2011-04-30 09:26:39
1、因为http协议是无状态连接,
2、服务端所有的事件都是通过表单提交的
3、viewstate用来存放页面刷新之前的表单值
4、放在后来使用。

datagrid分页,viewstate到底的作用: 

1、记录当前的页号,也就是翻到第几页了。 

2、当前DataGrid显示的数据的内容,比如DataGrid显示20行,那么只记录这20行的数据。 

好像没有其他的作用了。 


好像没有谁说过,它能对付海量数据的分页吧。 


  那要把ds记录到session里面才行的。 
 

posted on 2011-08-28 21:38  Snowberg  阅读(1020)  评论(0编辑  收藏  举报

导航