首 页  资讯中心 下载中心 资讯教程 最新下载 发布软件 发布文章 网通站 电信站繁體中文
设为首页
加入收藏
联系我们
 
您当前的位置:曾子源码软件下载站 -> 网络编程 -> asp.net -> 文章内容 退出登录 用户管理
热门文章
· 常用C,VC,C++书籍下..
· 新概念英语视频教程..
· 常用 JAVA JAVA2 J..
· 《梦幻麻将馆9雀圣争..
· 新东方英语视频教程..
· 常用VB,Visual Basi..
· [组图] After Effect..
· WINDOWS 所有系统文..
· [组图] 让机器运行多..
· 全美经典学习指导系..
相关文章
· 重视用户感受 快车..
· 手动清除恶意软件之..
· Flash Player11月出..
· [组图] Vista RTM版本..
· [组图] ASP.NET 2.0中..
· ASP.NET2.0 数据绑定..
· [图文] 好玩但又很安..
· 解决网络塞车 要靠N..
· ASP.NET数据库编程之..
· ASP.NET2.0服务器控..
ASP.NET 2.0的视图状态持久性机制(3)
作者: 博客园 子非鱼     来源:不详  发布时间:2006-6-12 22:02:59  发布人:admin

减小字体 增大字体

     文件
  
    这其实也跟数据库的差不了多少,我这只讲ASP.net2.0的,在ASP.NET1.1也应该差不多,但我没有写代码调试:
  
    还是用那种写PageStatePersister新子类的办法:
  
  namespace StreamPageAdapter
  {
   using System;
   using System.IO;
   using System.Security.Permissions;
   using System.Web;
   using System.Web.UI;
  
   //
   // The StreamPageStatePersister is an example view state
   // persistence mechanism that persists view and control
   // state on the Web server.
   //
  
   [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
  
   public class StreamPageStatePersister : PageStatePersister
   {
    public StreamPageStatePersister(Page page): base(page)
    {}
    //
    // Load ViewState and ControlState.
    //
  
    public override void Load()
    {
     Stream stateStream = GetSecureStream();
     // Read the state string, using the StateFormatter.
     StreamReader reader = new StreamReader(stateStream);
     IStateFormatter formatter = this.StateFormatter;
     string fileContents = reader.ReadToEnd();
     // Deserilize returns the Pair object that is serialized in
     // the Save method.
     Pair statePair = (Pair)formatter.Deserialize(fileContents);
     ViewState = statePair.First;
     ControlState = statePair.Second;
     reader.Close();
     stateStream.Close();
    }
    //
    // Persist any ViewState and ControlState.
    //
  
    public override void Save()
    {
     if (ViewState != null || ControlState != null)
     {
      if (Page.Session != null)
      {
       Stream stateStream = GetSecureStream();
       StreamWriter writer = new StreamWriter(stateStream);
       IStateFormatter formatter = this.StateFormatter;
       Pair statePair = new Pair(ViewState, ControlState);
  
       // Serialize the statePair object to a string.
       string serializedState = formatter.Serialize(statePair);
       writer.Write(serializedState);
       writer.Close();
       stateStream.Close();
      }
      else
       throw new InvalidOperationException("Session needed for StreamPageStatePersister.");
     }
    }
  
    // Return a secure Stream for your environment.
  
    private Stream GetSecureStream()
    {
     string path = @"d:\a.txt";
     FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite);
     return fs;
    }
   }
  }
  
    再重写PageStatePersister属性就可以了:
  
  protected override PageStatePersister PageStatePersister
  {
   get
   {
    return new StreamPageStatePersister (Page);
  
   }
  
  
    通过上面的简单介绍,我们应该有所了解了,只是要明白的是:在ASP.NET1.1中我们只能通过重写age.SavePageStateToPersistenceMedium()和Page.LoadPageStateFromPersistenceMedium()来完成上述功能;而在ASP.NET2.0中,我们除了这外,还和通过写PageStatePersister新子类和重写PageStatePersister属性来完成,我是没有发现什么不同,当然如果在下面的内容你就明白,写PageStatePersister新子类的真正用处了。
  
    使用页适配器
  
    由于状态持久性机制与自适应呈现和客户端功能有关,因此提供MyPageAdapter激活 ASP.NET 应用程序的 DatabasePageStatePersister。最后,提供了一个浏览器功能 (.browser) 文件来为特定类别的客户端(在此例中为默认 Web 浏览器)启用 MyPageAdapter器。
  
    这些内容请具体看我提供的源码中的PageAdapter工程。看了就明白了。
  
  using System.Security.Permissions;
  using System.Web;
  using System.Web.UI;
  
  namespace PageAdapter
  {
   [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
   public class MyPageAdapter : System.Web.UI.Adapters.PageAdapter
   {
    public override PageStatePersister GetStatePersister()
    {
     return new PageAdapter.DatabasePageStatePersister(Page);
    }
   }
  }
  
    最后,为了启用 MyPageAdapter 适配器,您必须在 ASP.NET 应用程序的根目录下创建一个名为 App_Browsers 的目录,并在其中包括一个包含配置信息的 .browser 文件(其实这些都在你向工程中添加一个.browser文件时vs2005会自动给你完成的。配置文件中的 <refID元素指示该配置重写为 Default.browser 配置文件中的默认浏览器指定的值。此示例将 MyPageAdapter 用于 ASP.NET 网页(但通常不使用适配器)。
  
  <browsers>
  <browser refID="Default" >
  <controlAdapters>
  <adapter
   controlType="System.Web.UI.Page"
   adapterType="PageAdapter.MyPageAdapter" />
   </controlAdapters>
  </browser>
  </browsers>
  
  
    这可以看源码中的TestPageAdapter工程。该工程用来演示页适配器的。
  
    结束语
  
    说得比较简单,可能也不是很明白,至于各种持久机制的优劣,我也没有专门测试过,而且最后一条“使用页适配器”也不是属于持久机制,只是用了也适配器,我们就不要重写
  
    PageStatePersister属性了,我看来好像用处不是很大,因为我们可以把重写PageStatePersister的动作放在页面基类中,其它所有页面都继承这个基类就可以了,在我代码中就是这么做的,用这个页适配器还麻烦了,当然我也并太清楚页适配器的这个东东。
  
    另外,对我的源码做个简单说明:
  
    1. PageAdapter工程
  
     DatabasePageStatePersister.cs:PageStatePersister类的子类
     MyPageAdapter.cs:页适配器
     DataAccess.cs和ViewSate.cs数据库访问的,属于辅助类。
  
    2. StreamPageAdapter工程
  
    这个与上面的相似,不多说了
  
    3. SaveStateToDatabase工程
  
    StateInHiddenField.aspx:测试默认的存储机制,就是在看页面源文件时可以看到一大堆乱七八糟东西的。
  
    StateInSession.aspx:存储机制为Session
  
    StateInDatabase.aspx:存储机制数据库,是重写方法的那种,asp.net1.1,2.0都可以用的。
  
    StateInDatabase2.aspx:写PageStatePersister新子类的并重写PageStatePersister属性的那种
  
    StateInFile.aspx:把ViewState保存在服务器中某个文件夹中。
  
    4. TestPageAdater工程。
  
    用来测试也适配器用的。
  
    做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
[] [返回上一页] [打 印] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [发表评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 网站信息排名查询
Copyright © 2004-2006 Zasp.Net. All Rights Reserved .