012-ViewState状态保持
Posted 灬伊天?
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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状态保持的主要内容,如果未能解决你的问题,请参考以下文章
如何更新导航抽屉中的有状态小部件,同时在 Android 中保持与片段相同的类?
对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段