ViewState探讨

原创 2012年03月28日 23:57:41

ViewState包含的状态与控件发送客户端时包含的状态相同。当浏览器把窗体发送回服务器,ViewStae包含了初始值,但所发送的控件包含了新值。如果初始值和新值有区别,就调用相应的事件处理程序。

下面来看个例子:

aspx文件关键代码为

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="lbl1" runat="server" EnableViewState="false" Text="1"></asp:Label>
        <asp:Label ID="lbl2" runat="server" Text="2"></asp:Label>
        <asp:Button ID="btn" runat="server" Text="点击" onclick="btn_Click" />
    </div>
    </form>
</body>
</html>


aspx.cs文件关键代码为

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ViewState["mydata"]="123";
    }
    protected void btn_Click(object sender, EventArgs e)
    {
        Response.Write((string)ViewState["mydata"]+"<br/>");
        int i1 = int.Parse(lbl1.Text);
        int i2 = int.Parse(lbl2.Text);
        int i3 = i1 + i2;
        lbl1.Text = i3.ToString();
        lbl2.Text = i3.ToString();
        Response.Write(i3);
    }
}


以上的代码运行的结果是两个label运行第二次之后就只是加1 了,原因是lbl1使用了不维护控件视图状态——也就是说它发送回服务器的数据始终没有变化,这使得Web服务器控件不会自动使用ViewState来使事件工作。而lbl2数据是变化是,会使其调用相应的事件处理程序。

ViewState["mydata"]="123";Response.Write((string)ViewState["mydata"]+"<br/>");

此处是定制的数据存储在ViewState中,为此可以使用索引符和Page类的ViewState属性。

关于ViewState的问题 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="之后有一大串乱码

在顶部中加入 EnableViewState="false" ,就可以去掉了,前提是你用不到它   先去开会,分析回来再写 ----------------------------------...
  • spritenet
  • spritenet
  • 2012年11月13日 15:45
  • 5175

ViewState解码器

这样编码也不成问题,好像又多了一个可以入侵的地方。 使用条件及下载地址: http://www.microsoft.com/china/msdn/library/webservices/asp.ne...
  • yandong19861103
  • yandong19861103
  • 2008年06月04日 18:10
  • 1164

viewstate解密

看完之后,觉得能不用viewstate就不用,再者像这样viewstate["a"]="b";这种简单的赋值是没有什么关系的,它生成的树是很小的,altas一定是用js修改了viewstate的,但方...
  • zb219
  • zb219
  • 2007年05月22日 16:03
  • 2148

HttpWebRequest支持带ViewState的网页POST请求

staticprivatestring SearchURL(string id){   try  {                //Get the ViewState and EventValid...
  • JerryChou
  • JerryChou
  • 2011年02月18日 21:12
  • 2274

ViewState及其与Session的关系

我们先来看深入分析一下viewstate, 为了分析的相对完整性,先从简单的说起: 在asp时代, 大家都知道一个html控件的值,比如input 控件值,当我们把表单提交到服务器后, 页面再刷...
  • junboyboy
  • junboyboy
  • 2014年01月06日 17:13
  • 944

ASP.NET 的 ViewState Cookie Session 等的比较

ASP.NET 的 ViewState Cookie Session 等的比较
  • zhanghui_hn
  • zhanghui_hn
  • 2014年04月19日 09:20
  • 1674

ViewState使用小结

ViewState是.Net中提出的状态保存的一种新途径,web程序保存状态的方式有这样几种:1、Application:保存在Application中的数据是全局有效的;Application里面存...
  • xidor
  • xidor
  • 2008年01月05日 23:36
  • 1645

ViewState的使用与配置

 ViewState就是页面中的名字叫做__VIEWSTATE的隐藏控件,它使我们页面体积膨胀,不利于页面的seo优化;页面返送间都要携带更多的大量的数据,耗费更多的流量、延长响应时间。 ...
  • yygzs2012
  • yygzs2012
  • 2017年04月06日 16:03
  • 422

用ViewState保存对象!

 以前只是用ViewState[“varName“]来保存基类型的变量,用它来代替input type=hidden 。但如何保存对象呢?用input type=hidden是不行了,用session...
  • shankaipingo
  • shankaipingo
  • 2006年09月21日 13:53
  • 1271

ViewState EnableViewState 禁用与使用心得

每个web控件都有个ViewState值,如果一个页面有太多的web控件而不禁用他们的viewstate值的话,会让页面速度大大降低。那么哪些控件的 EnableViewState="false...
  • hr541659660
  • hr541659660
  • 2015年11月11日 16:41
  • 2456
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ViewState探讨
举报原因:
原因补充:

(最多只允许输入30个字)