首页 > 代码库 > viewState解密
viewState解密
viewState.aspx页在没有禁用掉viewState时候的HTML源码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title> </title></head> <body> <form method="post" action="viewState.aspx" id="form1"> <div class="aspNetHidden"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=http://www.mamicode.com/"/wEPDwUKMTI2NTY4ODI3MQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFATBkZGQHx94b8VXnJ3QTOcyQ2gM/qme6s7sGZPT+Thk8fqFDgw==" />>什么是viewState: viewState其实就是用来存放数据的一个容器。[主要存放那些没有name 属性且没有value属性,或者有name属性,但是保存那些非value值的表单属性值] 如div的text值 或者input 中的button 表单的width,height属性值,
viewState.aspx代码
<%@ Page Language="C#" EnableViewState="false" AutoEventWireup="true" CodeBehind="viewState.aspx.cs" Inherits="WebApplication2.viewState" %> <%--EnableViewState="false" 的意思是禁用viewState;如果去掉EnableViewState="false"默认就是启用viewState--%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <%-- Label.Text的初始值为 Label--%> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </div> <asp:Button ID="Button1" runat="server" Text="自增" onclick="Button1_Click" /> </form> </body> </html>
viewState.cs代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication2 { public partial class viewState : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) //如果页面是第一次加载(也就是说页面不是通过提交数据(点击button按钮)的形式而加载的)那么就将Label的Text值设为0; { Label1.Text = "0"; } else { Label1.Text = Label1.Text; } } protected void Button1_Click(object sender, EventArgs e) { //Console.WriteLine(Label1.Text); int i = Convert.ToInt32(Label1.Text);//【在没有禁用viewState的情况下】当第一次进入http://localhost:5045/viewState.aspx页面的时候,因为是第一次进入页面,所以在Page_Load方法里面已经将Label1.Text的值 由最初始的"Label"改设为"0"了。所以当用户点击“提交”按钮,触发onClick事件来调用 Button1_Click方法,此时的i=0; 因为用户在没有禁用viewState的情况下,Label的Text值(0)存在 一个隐藏的表单 hidden的value值里。所以此时的Label1.Text的值为0 ,即int i的值为0了 //【在禁用viewState的情况下】当第一次进入http://localhost:5045/viewState.aspx页面的时候,因为是第一次进入页面,所以在Page_Load方法里面已经将Label1.Text的值 由最初始的"Label"改设为"0"了。当用户点击“提交”按钮,触发onClick事件来调用 Button1_Click方法,此时的Label.Text=Label1; 因为用户在禁用viewState的情况下,Label的Text值(0)已经无法存储在一个隐藏的表单 hidden的value值里了。所以,即便你(用户)在第一次进入页面后,将Label1.Text的值设为0后,在我重新取Label1的Text的值后,获取到的依然为最初始的"Label1",因为你新设的“0”如果不能放到隐藏表单hidden的value值存起来,下次再用的时候我就不知道你最新的值到底是多少,我只知道我最原始的值“Label1” 所以此时的Label1.Text的值为Label1 ,因为int i无法将"Label1"转换成一个int 类型,所以这里就会报错了。 i++; Label1.Text = i.ToString(); } } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。