ViewState 简述一(With Example And Apply to Asp.net)
2007-05-20 17:57
519 查看
ViewState是asp.net中最重要的功能之一,因为它提供了一种完全自动化的状态管理方式,当服务器端代码改变页面的状态时(server control's property), ViewState机制会自动存储这些变化,从而使客户端得到的是一致的页面。
让我们看一个例子:
<asp:Label runat="server" ID="lblMessage" Font-Name="Verdana" Text="Hello, World!" EnableViewState="false"></asp:Label>
<br />
<asp:Button runat="server" Text="Change Message" ID="btnSubmit"></asp:Button>
<br />
<asp:Button runat="server" Text="Empty Postback"></asp:Button>
"Change Message”用来改变label的Text,代码如下:
private void btnSubmit_Click(object sender, EventArgs e)
" Post Back"什么也不做就是post back.
当用户请求这个页面,LifeCycle 1,
asp.net会在Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
向用户发送"hello world"
用户点击了"Change Message" ,将请求重新发回服务器,LifeCycle 2
asp.net会在Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
在Load事件触发之后,处理PostBackEvent,将Lebel的text属性改为 "goodbye , Everyone"
向用户发送"goodbye , Everyone"
那么这时如果用户点击了"post back",我们希望服务器返回什么呢?当然是"good bye ,EveryOne".但是我们知道通常情况下Asp.net通过实例化一个Page-derived对象处理客户端的请求,并在处理完毕后迅速将其销毁.也就是说我们没有办法去存储类似"Goodbye ,Everyone"这种信息,当用户Post back后,当前状态将会丢失,服务器会运行 LifeCycle 1, 返回Hello world.
ViewState机制就是为了解决这种问题而设计的。假如我们将Label控件的 EnableViewState属性设置为True,那么LifeCyle 2 ,会变为:
asp.net再Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
再Load事件触发之后,处理PostBackEvent,将Lebel的text属性改为 "goodbye , Everyone"
检测象"Goodbye ,Everyone"之类状态的变化,将其存储在一个字符串中。
向用户发送"goodbye , Everyone",并将包含状态信息的字符串以hidden form field的方式一并发送给用户
当用户Post back,会将包含状态信息的Field ,Post给服务器
asp.net会在Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
再Init事件触发之后,解析客户端的请求信息(Hidden form field), 还原各个控件的状态信息
向用户发送"Goodbye Everyone"。
Ps: 将在下一篇文章中学习ViewState's Performance , and server side viewState.
This article based on Scott Mitchell's <<Understanding ASP.NET ViewState>>
And Dino Esposito's <<The Asp.net View State>>,thanks them.
让我们看一个例子:
<asp:Label runat="server" ID="lblMessage" Font-Name="Verdana" Text="Hello, World!" EnableViewState="false"></asp:Label>
<br />
<asp:Button runat="server" Text="Change Message" ID="btnSubmit"></asp:Button>
<br />
<asp:Button runat="server" Text="Empty Postback"></asp:Button>
"Change Message”用来改变label的Text,代码如下:
private void btnSubmit_Click(object sender, EventArgs e)
" Post Back"什么也不做就是post back.
当用户请求这个页面,LifeCycle 1,
asp.net会在Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
向用户发送"hello world"
用户点击了"Change Message" ,将请求重新发回服务器,LifeCycle 2
asp.net会在Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
在Load事件触发之后,处理PostBackEvent,将Lebel的text属性改为 "goodbye , Everyone"
向用户发送"goodbye , Everyone"
那么这时如果用户点击了"post back",我们希望服务器返回什么呢?当然是"good bye ,EveryOne".但是我们知道通常情况下Asp.net通过实例化一个Page-derived对象处理客户端的请求,并在处理完毕后迅速将其销毁.也就是说我们没有办法去存储类似"Goodbye ,Everyone"这种信息,当用户Post back后,当前状态将会丢失,服务器会运行 LifeCycle 1, 返回Hello world.
ViewState机制就是为了解决这种问题而设计的。假如我们将Label控件的 EnableViewState属性设置为True,那么LifeCyle 2 ,会变为:
asp.net再Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
再Load事件触发之后,处理PostBackEvent,将Lebel的text属性改为 "goodbye , Everyone"
检测象"Goodbye ,Everyone"之类状态的变化,将其存储在一个字符串中。
向用户发送"goodbye , Everyone",并将包含状态信息的字符串以hidden form field的方式一并发送给用户
当用户Post back,会将包含状态信息的Field ,Post给服务器
asp.net会在Init事件触发之前,初始化Label控件,其text属性的默认值设置为hello world
再Init事件触发之后,解析客户端的请求信息(Hidden form field), 还原各个控件的状态信息
向用户发送"Goodbye Everyone"。
Ps: 将在下一篇文章中学习ViewState's Performance , and server side viewState.
This article based on Scott Mitchell's <<Understanding ASP.NET ViewState>>
And Dino Esposito's <<The Asp.net View State>>,thanks them.
相关文章推荐
- ViewState 简述一(With Example And Apply to Asp.net)
- How to build Multi-Language Web Sites with ASP.NET 2.0 and VS.Net 2005
- ASP.NET MVC Example with Northwind and Entity Framework Published
- How to build Multi-Language Web Sites with ASP.NET 2.0 and VS.Net 2005
- Using ROW_NUMBER() to paginate your data with SQL Server 2005 and ASP.NET
- Basic Sample - How To Keep ASP.NET ViewState On The Server
- Many ways to communicate with your database using jQuery AJAX and ASP.NET
- How to Share Session State Between Classic ASP and ASP.NET
- Using ROW_NUMBER() to paginate your data with SQL Server 2005 and ASP.NET
- [转]Troubleshooting the "View state is invalid" error with ASP.NET
- Speed Up Your Site with the Improved View State in ASP.NET 2.0
- Screen Scraping, ViewState, and Authentication using ASP.Net
- Security Measure To Prevent URL Parameter Forgery- An Example with ASP.Net MVC
- ASP.NET Internals: Viewstate and Page Life Cycle(http://www.codeproject.com/KB/aspnet/aspnetviewstatepagecycle.aspx)
- Some Articles Help You To Understand ASP.NET ViewState
- Screen Scraping, ViewState, and Authentication using ASP.Net
- HOW TO: Configure SQL Server to Store ASP.NET Session State
- 【C#.NET】ASP.NET状态管理之五:隐藏域、ViewState、ControlState
- ASP.NET中Validation of viewstate MAC failed问题的解决
- 压缩ASP.NET中的ViewState