ViewState的学习随笔
------- Windows Phone 7手机开发 黑马程序员 .Net培训 期待与您交流! -------
3.状态保持的学习
①ViewState --- 在客户端
⑴ 页面的ViewState属性实际上就是获取了浏览器提交过来的一个名为__VIEWSTATE的隐藏域里的值
⑵ 要使用ViewState页面中必须包含一个runat="server"的表单
②ViewState 实现原理
⑴在页面类对象,执行PR方法的时候,先创建了控件树,然后通过执行LoadState方法,将请求报文中名字为__VIEWSTATE的值,然后反base64编码,进行反序列化,最终还原成集合,然后将其中属于程序员自己添加到ViewState里的的键值对还原到 页面对象的ViewState属性中。然后才执行的Page_Load方法。
⑵ViewState中还保存了服务器端控件的属性
⑶禁用的ViewState页面开始标记中<%@ %>中添加 EnableViewState="false",这样可心去掉服务器端控件的属性
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CookieLoginManager.aspx.cs" Inherits="CookieLoginManager" EnableViewState="false" %>
4.IsPostBack --- 当在浏览器中点击按钮,以post方式向服务器提交表单,就叫做回传.
实现原理:只要浏览器提交的请求报文中包含__VIEWSTATE这个键,ASP.NET就会将 页面的IsPostBack属性设置为true,也就是说可以在浏览器地址中添加参数?__VIEWSTATE这个参数。
5.关于“验证视图MAC失败”的原因。
当aspx页面<form>表单属性中添加了 runat="server"时,使用html控件提交表单时只能提交到当前页面,要提交到其他页面需要使用服务器端控件。当使用html控件提交表单时,会出现错误,原因是在form标签中添加了runat="server"会产生一个ViewState,在ViewState中记录当前页面服务器控件的属性(如果页面存在服务器控件)和用户自定义的ViewState,还有页面的特征码。当点击html控件提交到其他页面时,目标页面会验证页面的特征码是否符合自己页面的特征码,当特征码不符合时就会报错。如果不使用服务器控件提交表单,建议不要在form标签中添加runat="server"属性。