快速业务通道

Asp.Net Mvc: 浅析TempData机制

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

环境:

Windows 2008, VS 2008 SP1, Asp.Net Mvc 1.0

一. Asp.Net Mvc中的TempData

在Asp.Net Mvc框架的ControllerBase中存在一个叫做TempData的Property,它的类型为 TempDataDictionary,顾名思义是一个字典类。TempData在Asp.Net Mvc中的作用是:可用于在Action执 行过程之间传值。简单的说,你可以在执行某个Action的时候,将数据存放在TempData中,那么在下一次 Action执行过程中可以使用TempData中的数据。

如:

上面的代码中,Index()给TempData添加了一个键值对,假设我们先请求Index这个Action,接着请求 Index2这个Action,那么在Index2中,我们便可以得到之前添加到TempData的键值对。有趣的是,这时如 果再次请求Index2,那么从TempData中读到的MyName的值会是null。于是,我们需要了解TempData的生命 周期。

二. TempData的生命周期

我们知道Http是无状态的,为什么TempData可以在两次请求之前传递数据呢?很明显,这个数据必定 是已某种形式保存了。查看Controller类的源代码,很容易的找到了我们想要的东西:

从上面的代码可以看出,每次在执行Action之前,都要调用一下TempData.Load()方法,执行完Action 之后,再调用一下TempData.Save()方法。另外这里还有一个重要成员TempDataProvider。

阅读了相关源代码之后,真相大白了。

TempData.Load()

TempData.Save()

TempDataProvider用于暂存数据。在TempData.Load()方法中,TempDataProvider中保存的数据会被读 到TempData中,供Action调用过程中使用。Action执行完后,TempData.Save()所作的事情则是,移除 TempData中任何没有被更新的键值对,然后再将TempData中的数据保存,供下一次调用使用(注:也就是 说,只有更新过的,以及新添加的键值对才能再下次request中继续使用)。为什么TempData中的数据需 要迅速被清除呢?很简单,节约内存嘛。

三. ITempDataProvider

前面提到的TempDataProvider是Controller的一个Property,它的定义是这样的:

这里我们看到了一个默认实现的SessionStateTempDataProvider类。也就是说,默认情况下,Asp.Net Mvc通过SessionStateTempDataProvider来保存TempData的数据。很明显,数据是存在Session中的,也就 是说,如果你禁用SessionState,那么你的页面就报异常了。

Asp.Net Mvc生来就是被设计为易扩展的,我们可以很容易通过实现自己的ITempDataProvider类来替 换这个默认的SessionStateTempDataProvider。需要注意的是,TempDataProvider存放的数据必需具有用 户独立性。

ITempDataProvider接口定义非常简单:

在MvcFutures中,你也可以找到一个CookieTempDataProvider,提供了将TempData存储在Cookie中的 实现。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号