博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈 ViewState
阅读量:4616 次
发布时间:2019-06-09

本文共 1612 字,大约阅读时间需要 5 分钟。

   让我们先把ViewState暂且放在一边,从asp.net中状态(信息)保持方案先聊起吧!

   在asp.net中状态信息保持方案分一般为服务器端和客户端,其中 服务端有Session,Application Object,Cacheing,DataBase,而在客户端有 ViewState,Hidden Field,Cookies,Control State 以及 URL中的Query String。服务器器端的状态信息保持方案 我在这就不谈了,只谈客户端的。

   虽然客户端中将ViewState与 Hidden Field 分开成两种,但我认为他们两个本质上却是相同的,都属于隐藏域Hidden Field,这是因为 在浏览器中 ViewState 会被浏览器解析为 

<input

type="hidden"

name="__VIEWSTATE"

id="__VIEWSTATE"

 value="/wEPDwULLTEzNjQyNDE3OTUPFgQeA2tlbgUDMTIzHgFrAugHZGQIFtRxnn3yJ/pthGHALY68nryU/Q==" />

很明显 type="hidden",因此我认为 ViewState 也是一种隐藏域(个人看法而已啦)

那么 会有人问 后面 value 那一长串的东西是什么呢,这里我先卖一个小小的关子,下面我会详细讲来~~~ 

    好了,现在回到主题,什么是ViewState? 在微软MSDN上, ViewState 是这样解释   ----"获取状态信息的字典,这些信息使您可以在同一页的多个请求间保存和还原服务器控件的视图状态"。听起来真的很拗口,那我来解释一下吧,见谅~~按照个人的理解 ViewState 是asp.net 页面所特有的,是页面级别的,即在页面上的一个隐藏域中保存客户端单独使用数据的一种方式,服务器端控件中的值都自动保存在其中。在这里你要注意,ViewState 是页面级的,不支持跨页面进行传值,其次如果你希望使用ViewState,那么页面中必须有一个服务端窗体标记<form runat="server">。那么,“获取状态信息的字典” 如何解释呢?? 可能很多朋友在使用ViewState是这样使用的ViewState["k"] = 1000,并没有意识到其实 ViewState 有字典一样的方法,即键值对,如果我这样些 你应该会明白了。                                                                       

                              ViewState.Add("k",1000)

想起了吧,如同我们所使用的字典的用法 Dictionary<TKey,TValue>。

如果用反编译器 使用IL语言查看 你会看到 如下(注意红色标识的方法)

  L_0030: instance class [] []::()

  L_0035: "k"

  L_003a: 0x3e8

  L_003f:

  L_0044: instance []::(, )

   好了,现在开始解释 value="/wEPDwULLTEzNjQyNDE3OTUPFgQeA2tlbgUDMTIzHgFrAugHZGQIFtRxnn3yJ/pthGHALY68nryU/Q==" /> 是什么东东了!其实 当浏览器第一次加载aspx页面的时候,浏览器并不知道该页面是否有ViewState,这时候它便要去解析,首先便要去对Page_Load,如果有ViewState,浏览器便会保存ViewState,但浏览器并不会立刻保存,而是先会对ViewState的值进行序列化,然后base64编码,再调用SaveState() 方法保存 ViewState 的值,这就是为什么 value 会这样的原因!

   

  

转载于:https://www.cnblogs.com/xianrongbin/archive/2011/10/30/2229159.html

你可能感兴趣的文章
elasticsearch的监控脚本
查看>>
你还在为使用P/Invoke时,写不出win32 api对应的C#声明而犯愁吗?
查看>>
msbuild property metadata会overwrite msbuild task中的properties
查看>>
python系列前期笔记
查看>>
Android -- sqlite数据库随apk发布
查看>>
Android -- Fragment
查看>>
前端性能优化和规范
查看>>
《你必须知道的.NET》读书笔记三:体验OO之美
查看>>
python 之进程篇
查看>>
移动Web 开发中的一些前端知识收集汇总
查看>>
框架编程之路一
查看>>
Verilog学习----运算符、结构说明语句
查看>>
python 中的socket
查看>>
ASP.NET + VB.NET + SQL小网站程序
查看>>
Windows Media Player 键盘快捷键
查看>>
Java中main方面面试题
查看>>
面向对象 理论 笔试
查看>>
WPF简介:VS创建桌面应用程序
查看>>
PHP怎么样去掉从word直接粘贴过来的没有用的格式
查看>>
Python SQLAlchemy --2
查看>>