首页  韩国资源  酷站加油  我的展厅  设计名站  古典元素  推荐下载  设计欣赏  每周专访  招募精英  人才专区  网页教程  平面设计  编程开发  设计竞赛
当前位置:首页 > 编程开发 > ASP.net教程 > Asp.Net实例教程 > 正文
Google
ASP.NET 2.0 页面状态持续程序
来源:68design.net 2007年10月17日 09:33 网友评论:0条 点击:

  摘要: ASP.NET 2.0 添加了对于改变页面的 ViewState 数据存储位置的支持。本文介绍如何创建一个新类并使用该类在 Session(而不是默认的隐藏字段)中存储 ViewState 信息。

  ASP.NET 控件的开发人员利用 ViewState 和控件状态来保持浏览器发出的各请求之间的状态信息。通常,该信息作为由页面呈现的 HTML 标记中的隐藏字段传送给客户端。然后,该页面状态作为下一个窗体提交的一部分传回服务器并还原给控件或页面。即使浏览器使用 HTTP 协议(该协议定义为无状态),但利用临时存储状态信息的功能,控件的开发人员能够轻松地提供更丰富的应用程序体验。

  ASP.NET 2.0 允许您修改临时保持页面状态的位置和方式。在某些情况下,避免在客户端与服务器之间往返传送数据可能更为可取。ASP.NET 2.0 提供的两个页面状态持续程序分别是 HiddenFieldPageState 持续程序(我们已提到过)和 SessionPageStatePersister。SessionPageStatePersister 利用与浏览器会话相关的服务器会话存储数据。使用 SessionPageStatePersister 有正反两个方面。对于发送到(自)浏览器的页面而言,使用会话(而非隐藏字段)可以避免其大小的增加。在许多情况中,页面状态是全部标记的一个重要部分。然而,在会话中存储数据将占用宝贵的服务器资源。此外,隐藏字段不像会话那样具有相关的超时。您可以配置一个应用程序,以便将会话保持到后端数据库,并避免将负载直接加到 Web 服务器。这也将扩展至 Web 场方案。

  要使用除默认持续程序之外的持续程序,需要重写该页的 PageStatePersister 属性,并返回另一个持续程序的一个实例。首先,下面的一个简单页面只使用大量数字填充一个 ArrayList,然后将它绑定到一个 GridView 控件。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
    protected override PageStatePersister PageStatePersister {
        get {
            return new SessionPageStatePersister(this);
        }
    }
    protected override void OnLoad(EventArgs e) {
        base.OnLoad(e);
        if (!IsPostBack) {
            ArrayList list = new ArrayList();
            for (int i = 0; i < 1000; i++)
            {
                list.Add(Convert.ToString(i));
            }
            GridView1.DataSource = list;
            GridView1.DataBind();     
        }
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="GridView1" runat="server" />       
        <asp:Button ID="Button1" runat="server" Text="Submit" /></div>
    </form>
</body>
</html>
  当查看该页面所呈现的 HTML 时,您会看到一个用于传送 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><title>
   Untitled Page
</title></head>
<body>
    <form name="form1" method="post" action="default2.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUKMTQ0MDQzNjk2Ng9kFgICBA9kFgICAQ88KwANAgAPFgYeC18hRGF0YUJv
dW5kZx4JUGFnZUNvdW50AgEeC18hSXRlbUNvdW50AhRkDBQrAAEWBh4EVHlwZRkrAh4ETmF
tZQUESXRlbR4JRGF0YUZpZWxkBQEhFgJmD2QWKgIBD2QWAmYPDxYCHgRUZXh0BQEwZGQCAg
9kFgJmDw8WAh8GBQExZGQCAw9kFgJmDw8WAh8GBQEyZGQCBA9kFgJmDw8WAh8GBQEzZGQCB
Q9kFgJmDw8WAh8GBQE0ZGQCBg9kFgJmDw8WAh8GBQE1ZGQCBw9kFgJmDw8WAh8GBQE2ZGQC
CA9kFgJmDw8WAh8GBQE3ZGQCCQ9kFgJmDw8WAh8GBQE4ZGQCCg9kFgJmDw8WAh8GBQE5ZGQ
CCw9kFgJmDw8WAh8GBQIxMGRkAgwPZBYCZg8PFgIfBgUCMTFkZAIND2QWAmYPDxYCHwYFAj
EyZGQCDg9kFgJmDw8WAh8GBQIxM2RkAg8PZBYCZg8PFgIfBgUCMTRkZAIQD2QWAmYPDxYCH
wYFAjE1ZGQCEQ9kFgJmDw8WAh8GBQIxNmRkAhIPZBYCZg8PFgIfBgUCMTdkZAITD2QWAmYP
DxYCHwYFAjE4ZGQCFA9kFgJmDw8WAh8GBQIxOWRkAhUPDxYCHgdWaXNpYmxlaGRkGAEFCUd
yaWRWaWV3MQ9nZMhHZ3iQZp62S8IR8fTJ5ZL42ira" />
</div>
...
  当我们向 PageStatePersister 属性添加重写并使用内置 SessionPageStatePersister 时,该页面的行为保持不变,但是用于大量状态数据的存储将从隐藏字段转换为会话状态。

    protected override PageStatePersister PageStatePersister
    {
        get
        {
            return new SessionPageStatePersister(this);
        }
    }

首页 上一页 [1] [2] 下一页 尾页
上一篇:一个Asp.NET写文件实例   下一篇:C#高级编程中的事件DEMO实例
收藏此页】【打印】【关闭
 相关文章  我要点评
·ASP.NET2.0中文验证码的实现
·ASP.NET防止用户多次登录的方法
·ASP.NET中备份SQL Server数据库的方法
·ASP.NET页面间数据传递
·ASP.NET缓存的方法分析
·ASP.NET 2.0中连接字符串的设置
·ASP.NET程序安全的基础知识
·处理ASP.Net开发常见Datagrid错误

免责声明:本站刊载此文不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。对本文有任何异议,请联络:68design#163.com
转载要求:作者及来源信息必需保留。转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印。



关于我们 | 在线反馈 | 广告报价 | 友情链接 | 联系我们 | 免责声明 | 在线投稿 | 网站地图
Copyright © 2003-2007 68design.net, All Rights Reserve 【找网页设计师,当然上网页设计师联盟】