Asp.Net 中引入ViewState的背景:

       由于Http请求是一种无状态请求,即Web服务器不会记录任何客户端的独特信息,以最大效率的运行。然而此时(假设是用纯Asp 语言),假若我们提交了文本框至服务器,在提交过程中,从服务器端重新返回实例化一个页面类的对象,而这个对象页并没有保留住我们之前输入文本框的值,即我们的值丢失了!

       正是在上述背景下,作为Asp 与 .NET框架的完美结合体——Asp.Net 产生了。为了克服这种障碍,其引入的状态管理功能,即应用ViewState可以在同一页面的多次服务器请求之间保留以及控件的值,成功克服了这种困难!

       在默认情况,Asp.Net页框架使用ViewState在多次回送之间保留控件值,而在发送至客户端浏览器的HTML代码上,则具体表现为一个或多个隐藏的<input type="Hidden">字段。

      下面即就ViewState 所针对的两种保存值对象——页值控件值,分而讨论之:

 

ViewState 保留页值的方法:

先看初始状态下,所建立服务器端HTML代码:

<form id="form1" runat="server">
    
<div>
        
<asp:Label ID="lbelDemo" runat="server" Text="lbelInit"></asp:Label>
        
<br />
        
<asp:Button ID="btnSub1" runat="server" Text="btnSub1" 
            onclick
="btnSub1_Click" />
        
<asp:Button ID="btnSub2" runat="server" Text="btnSub2" />
    
</div>
    
</form>

其对应的后台代码为:

 1 public partial class _Default : System.Web.UI.Page 
 2 {
 3     protected void Page_Load(object sender, EventArgs e)
 4     {
 5         if (!IsPostBack)
 6         {
 7             //赋予ViewState为整数int型,初值为1
 8             ViewState["count"= 1;
 9         }
10         if (IsPostBack)
11         {
12             //在回送状态下,实现ViewState的逐个累加
13             ViewState["count"= (int)ViewState["count"+ 1;
14         }
15 
16     }
17     protected void btnSub1_Click(object sender, EventArgs e)
18     {
19         //旨在通过点击btnSub1触发事件,实现将ViewState状态值,及时反馈在lbelDemo中
20         lbelDemo.Text = ViewState["count"].ToString();
21     }
22 }

在浏览器上,初次展现为(如下图):

Asp.Net 中ViewState—视图状态浅析 

查看其源代码为:

<body>
    
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTExNjMzNDIxNjQPFgIeBWNvdW50AgFkZD/xqNtuWCI2N3knwGlV+hqR7lUO" />
</div>

<div>

    
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKRvOPFDgKU2NnBCwKvwffWBd/L4HJDqcil+WEelebQudVq4Brk" />

</div>
    
<div>
        
<span id="lbelDemo">lbelInit</span>
        
<br />
        
<input type="submit" name="btnSub1" value="btnSub1" id="btnSub1" />
        
<input type="submit" name="btnSub2" value="btnSub2" id="btnSub2" />
    
</div>
    
</form>
</body>

相关文章: