ASP.NET页面——视图状态

转载 2016年05月30日 13:54:01
作者:无风  http://www.cnblogs.com/zhaozhan/archive/2009/06/21/1507844.html
【转载自无风博客】

      从运行的ASP.NET应用程序中,首先注意的是页面的会送功能。这对于开发人员真的是一个好处,开发人员不用手动保存服务器的每次往返之间的信息。ASP.NET为服务的服务器控件(服务器控件使用runat=’”server”属性指定)提供视图状态。当ASP.NET为HTML的形式呈现页面时,它创建一个隐藏的窗体字段,成为_ViEWSTATE。这个字段是一个加密的、标记化得字符串(可以通过工具ViewStateDecoder查看,下载地址),包含ASP.NET页面上每个控件的名/值对。每个控件存储的值实际上时控件关联的值和状态信息。当页面被发送到服务器是,ASP.NET可以轻松地使用这些值并重新构建页面控件,控件的值和状态,不用开发人员编写代码。

创建一个ASP.NET页面PageViewStateDemo.aspx实现一个文本框,两个按钮实现文本框的隐藏和显示,以说明ViewState字段值是如何工作的。页面代码如下:

<formid="form1"runat="server">
<div><br/><br/><br/><br/>
</div>
<divstyle="display:inline; z-index:101; left:16px; width:70px; position:absolute;
top:25px; height:15px">Test Field</div>
<asp:TextBoxID="txtName"style="z-index:106; left:101px; position:absolute;
top:23px"runat="server"></asp:TextBox>
<asp:ButtonID="btnHide"
style="z-index:111; left:15px; position:absolute; top:59px;"runat="server"
Width="61px"Text="Hide"onclick="btnHide_Click" />
<asp:ButtonID="btnShow"
style="z-index:112; left:95px; position:absolute; top:59px;"runat="server"
Width="61px"Text="Show"onclick="btnShow_Click" /> </form>

后台代码很简单:
protected void btnHide_Click(object sender, EventArgs e)
{
this.txtName.Visible = false;
}
protected void btnShow_Click(object sender, EventArgs e)
{
this.txtName.Visible = true;
}

在浏览器查看该页面,在ASP.NET页面返回后查看其源代码:
image

利用刚才提到的ViewState查看工具ViewStateDecoder查看ViewState:
image

点击Hide按钮再看源代码:
image



可以看到ViewState的值不一样了:

image



ViewState在开发Web页面是确实可以节约时间。但是,它有性能成本。在上面的例子可以看出,对服务器控件的一个属性的最轻微的修改也会改变视图状态的大小。在页面中添加10到20个简单的服务器控件,和几个高级的服务器控件,可以看到呈现HTML的大小可以变成应用程序的一个瓶颈,尤其是对于带宽有限的用户来说。

为了提高ASP.NET应用程序的性能,必须得控制服务器控件的使用以降低呈现的HTML的大小。控制服务器控件的手段就是在不需要服务器的代码执行期间在不需要与控件交互时使用静态的HTML控件。

image

对一个正常的HTML控件使用runat=“server”属性,它就可以从服务器端的代码中访问,并且和ASP.NET服务器控件具有相同的性能损失。

禁用ViewState的方式有:

1、禁用控件的ViewState
<asp:TextBox ID="TextBox1" EnableViewState="false" runat="server"></asp:TextBox>

设置TextBox1的ASP.NET文本框在视图状态中不再保存任何信息。但不会影响页面中其他控件或页面本身的ViewState信息。



2、禁用页面的ViewState
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" %>



禁用用户控件的ViewState跟禁用页面的ViewState类型也是设置其EnableViewState="false" 。

3、禁用应用程序的ViewState
<pages enableViewState="false">

ASP.NET页面——视图状态

      从运行的ASP.NET应用程序中,首先注意的是页面的会送功能。这对于开发人员真的是一个好处,开发人员不用手动保存服务器的每次往返之间的信息。ASP.NET为服务的服务器控件(服务器控件使用runat=’”server”属性指定)提供视图状态。当ASP.NET为HTML的形式呈现页面时,它创建一个隐藏的窗体字段,成为_ViEWSTATE。这个字段是一个加密的、标记化得字符串(可以通过工具ViewStateDecoder查看,下载地址),包含ASP.NET页面上每个控件的名/值对。每个控件存储的值实际上时控件关联的值和状态信息。当页面被发送到服务器是,ASP.NET可以轻松地使用这些值并重新构建页面控件,控件的值和状态,不用开发人员编写代码。

      创建一个ASP.NET页面PageViewStateDemo.aspx实现一个文本框,两个按钮实现文本框的隐藏和显示,以说明ViewState字段值是如何工作的。页面代码如下:

    <formid="form1"runat="server">
    <
div><br/><br/><br/><br/>  
    </
div>
    <
divstyle="display:inline;z-index:101; left:16px; width:70px;position:absolute;
     top:25px; height:15px">Test Field</div>
    <
asp:TextBoxID="txtName"style="z-index:106;left:101px; position:absolute;
    top:23px"runat="server"></asp:TextBox>
    <
asp:ButtonID="btnHide"
      
style="z-index:111;left:15px; position:absolute; top:59px;"runat="server"
      
Width="61px"Text="Hide"onclick="btnHide_Click" />
    <
asp:ButtonID="btnShow"
      
style="z-index:112;left:95px; position:absolute; top:59px;"runat="server"
      
Width="61px"Text="Show"onclick="btnShow_Click" /> </form>

   后台代码很简单:

    protected void btnHide_Click(object sender, EventArgs e)
    {
        this.txtName.Visible = false;
    }
    protected void btnShow_Click(object sender, EventArgs e)
    {
        this.txtName.Visible = true;
    }
 
  在浏览器查看该页面,在ASP.NET页面返回后查看其源代码:
   
  
   利用刚才提到的ViewState查看工具ViewStateDecoder查看ViewState:
    
 
    点击Hide按钮再看源代码:
     

   

     可以看到ViewState的值不一样了:

image

 

     ViewState在开发Web页面是确实可以节约时间。但是,它有性能成本。在上面的例子可以看出,对服务器控件的一个属性的最轻微的修改也会改变视图状态的大小。在页面中添加10到20个简单的服务器控件,和几个高级的服务器控件,可以看到呈现HTML的大小可以变成应用程序的一个瓶颈,尤其是对于带宽有限的用户来说。

     为了提高ASP.NET应用程序的性能,必须得控制服务器控件的使用以降低呈现的HTML的大小。控制服务器控件的手段就是在不需要服务器的代码执行期间在不需要与控件交互时使用静态的HTML控件。

     image

     对一个正常的HTML控件使用runat=“server”属性,它就可以从服务器端的代码中访问,并且和ASP.NET服务器控件具有相同的性能损失。

     禁用ViewState的方式有:

     1、禁用控件的ViewState

       <asp:TextBox ID="TextBox1" EnableViewState="false"  runat="server"></asp:TextBox>

      设置TextBox1的ASP.NET文本框在视图状态中不再保存任何信息。但不会影响页面中其他控件或页面本身的ViewState信息。

 

     2、禁用页面的ViewState

<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" %>

 

      禁用用户控件的ViewState跟禁用页面的ViewState类型也是设置其EnableViewState="false"

     3、禁用应用程序的ViewState

   <pages enableViewState="false">


ASP.NET Post页面及验证视图状态MAC失败问题的正确解决办法

今天做了个首页登陆的页面,是用Request.Form接收参数的 然后又做了个测试页面test.aspx,代码如下:                              ...

ASP.NET页面状态管理——ViewState的使用

ASP.NET ViewState设计目的是为了持久化当前页面中的对象的状态,以便下次在页面回发(Postback)后能够还原页面的状态。那么有两点需要注意: ViewState只在需要Post...
  • xwnxwn
  • xwnxwn
  • 2013年03月25日 14:31
  • 519

黑马程序员_学习日记11_asp.net初探之视图状态

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 如果你一开始就使用asp.net网站...

Asp.net视图状态的作用

视图状态(view state)是在单个页面中保存信息的第一选择,ASP.NET Web控件也使用试图状态在回发间保存属性值。通过页面内建的 ViewState 属性,你可以把自己的数据放入到视图状态...

Asp.net之视图状态讲解

为Web页面及其控件保持状态信息是非常有必要的。然而,由于Web应用程序创建于HTTP协议的顶层,这是一个无状态的协议,因此,保持状态信息则变得非常困难。为了解决这个问题,ASP.NET 2.0技术提...

《ASP.NET本质论》视图状态 ViewState

序列化和反序列化                    对象在内存中以引用的方式相互联结,构成一个复杂的对象数。但是,在外部的设备中,却是以一定的序列保存的,比如,图片文件是以一个有规律的字节序列进...
  • sky1069
  • sky1069
  • 2011年08月08日 17:15
  • 401

asp.net 视图状态简介

在asp.net开发的应用程序中,当某个页面被请求时,它的类及其所包含的服务器控件会负责处理请求,呈现HTML输出,并随后发回客户端.由于HTTP协议的固有特性,客户端与服务器间的通信是无状态且非连接...

ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式

方式一: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } ...

ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式

 方式一:   数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递   前台接收显示数据视图View:     ...

ASP.NET MVC中从前台页面视图(View)传递数据到后台控制器(Controller)方式

方式一: 数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递 前台接收显示数据视图View: div style="height:300px; wid...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET页面——视图状态
举报原因:
原因补充:

(最多只允许输入30个字)