精彩专题推荐:建站之入门课 建站之必修课 建站之关键课 网站价值所在 流量提高专题 css+div 标准 个人网站打造全过程
返回建站学首页
导航:
建站首页 | 网站设计 | 网站开发 | 网站运营 | 网页软件 | 建站指南 | 搜索优化 | 图像处理 | 视频教程 | 书籍教程 | 建站专题
当前位置:首页>网站开发>asp.net教程>正文

ASP.NET 2.0 页面状态持续程序实例


来源:不详 时间:07-10-17 点击: 点击这里收藏本文

<!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);
        }
    }

  请注意,在该页面的源代码中,隐藏字段值要小得多,但并没有完全消失。ASP.NET 仍将在页面输出中传送一些最小的数据集。

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPaA8FDzhjNzkyNTMzNjE1YWEyNxgBBQlHcmlkVmlldzEPZ2QZw
44JLJFcglwRl9TiNliE82yAuQ==" />

  在某些方案中,您可能只想将与之类似的代码添加到一个较小的页面集中,因此添加与之类似的简单重写也许是可接受的。当您希望一个完整的应用程序或一个较大的页面集拥有该行为时,需要一个用于控制它的更集中化的方式。有几种方式可以实现这一点。我们可以将创建该持续程序的代码移动到从页面继承的类中:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public class PagePersisterBasePage : Page
{
    public PagePersisterBasePage()   {
    }
    protected override PageStatePersister PageStatePersister {
        get {
            return new SessionPageStatePersister(this);
        }
    }
}

  ASP.NET 2.0 使您能够使用“Inherits”页面指令指定页面的基类型。然后,ASP.NET 为该页面生成的代码从该基页面继承,而且无需在每个页面中复制该代码。

<%@ Page Language="C#"  Inherits="PagePersisterBasePage" %>

  此外,配置选项使我们能够设置页面位置,以便所有页面使用单一的基页面类型。在该 web.config 页中,我们设置了 pageBaseType,并且无需将 Inherits 属性添加到任何页面来获取自定义的 PageStatePersister 行为。

<?xml version="1.0"?>
<configuration>
   <system.web>
    <pages pageBaseType="PagePersisterBasePage" />
   </system.web>
</configuration>

  更改 PageStatePersister 并不是一件轻松的事。请仔细考虑您的应用程序和部署。尽管在隐藏字段中往返传送 ViewState 存在相关的开销,但是要将状态保持在那里,则需要有直接的服务器资源消耗。通过前面的示例您可以看到,可以插入自定义持续程序以便将状态存储在其他地方,例如,后端数据库或 Web 场共享的状态服务。此外,正如我们所演示的,您可以集中控制应用程序的行为,或者按页在页面上进行控制。

9 7 3 1 2 4 8 :

  把此文章收藏到:          
广而告之
文章搜索
  • Google JZxue.Com

关于我们 | 联系我们 | 友情链接 | 网站地图
Copyright © 2005 - 2006 建站学 All rights reserved.