首页 > 代码库 > 012-ViewState状态保持

012-ViewState状态保持

技术分享

客户端的状态保持方案:ViewState、隐藏域、Cookies、控件状态、URL查询参数
服务端的状态保持方案:Session(会话)、Application、Caching(缓存)、DataBase(数据库)

-》ViewState
-》示例:使用服务器label控件,添加按钮,能实现+1吗?
查看源代码,发现生成了span,这是不能提交数据的,这究竟发生了什么?
本质:隐藏域
源代码中多了名为ViewState的hidden客户端控件,对状态进行了存储
-》属性ViewState:是继承于Control类的键值对集合类型的属性
存储的是:服务器端需要,但是又无法提交给服务器的数据
实现了服务器端控件
-》禁用ViewState:
整个页面禁用:ViewStateMode = ViewStateMode.Disabled
单个控件禁用:EnableViewState="False"
禁用后,可以试一试文本框+1,label加1是否还有效?
-》总结:因为生成了隐藏域,并且存储了太多的内容,所以不推荐使用
尽量少或不使用ViewState、服务器控件

 1 <%@ Page Language="C#" AutoEventWireup="true"
 2     ViewStateMode="Enabled"
 3     CodeBehind="ViewStateTest.aspx.cs" Inherits="t4_State.ViewStateTest" %>
 4 
 5 <!DOCTYPE html>
 6 
 7 <html xmlns="http://www.w3.org/1999/xhtml">
 8 <head runat="server">
 9     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
10     <title></title>
11 </head>
12 <body>
13     <form id="form1" runat="server">
14         <div>
15 
16             <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
17             <asp:Label ID="Label1" runat="server" Text="0"></asp:Label>
18 
19         </div>
20     </form>
21 </body>
22 </html>
 1     public partial class ViewStateTest : System.Web.UI.Page
 2     {
 3         protected void Page_Load(object sender, EventArgs e)
 4         {
 5             if (!IsPostBack)
 6             {
 7                 ViewState["yg"] = "杨过";
 8             }
 9         }
10 
11         protected void Button1_Click(object sender, EventArgs e)
12         {
13             Label1.Text = (int.Parse(Label1.Text) + 1).ToString();
14             //Label1.Text = ViewState["yg"].ToString();
15         }
16     }

 

012-ViewState状态保持