暂态

在很多情况下,您都希望状态能够持续于整个请求期间,然后再完全自动删除。在这种情况中,特别是当控件处于独立的类时,您需要在页面间、甚至在页面处理的不同阶段的控件间传递数据。在这些情况下,需要找到一个在它们之间传递数据的合适方法,这个方法仅需延长处理当前页面请求的时间即可。

利用会话状态并不是一个很好的解决方案,因为这样会为一个根本不需要延长会话时间的状念浪费服务器资源。即便可以在元素处理完中之后对其手动删除,从而保留这些资源,但如果会话状态被设置为存储在独立的状态服务器或SQL Server中,就会遭受相应的性能冲突。

ASP.NET提供了一个HttpContext类,该类用以表示当前请求的上下文。我们已经了解到如何利用这个类提供的属性,即用HttpContext.Current.SessionHttpContext.Current.Application属性,来访问应用程序状态或会话状态。而是,这个类的实例可以作为Control类的属性使用,Page和所有的服务器控件都派生于Context

除了这些属性,context对象中还有—个Items属性,它可以保存任何类型的数据。无论在这个属性中放置了什么内容,都会在请求处理结束后被自动删除。这就是我们称之为暂态的原因,也就是说,因为它不像会话、应用程序、视图状态和cookies那样能够持续保存,稍后我们将讲到这些内容。

            Context.Items["selected"] = ViewState["selected"];

            Server.Transfer("RequestContact.aspx");

注意,这里使用的是Server.Transfer ()方法而不是Response.Redirect()。利用这个方法,ASPNET可以把处理过程交给特定的页面去完成,面不是结束当前执行的上下文或请求,请求更可能被发送到目标贞面。由于处理转换发生在服务器端,所以客户浏览器并不知道发生了什么事情,这就是URL在转换之后保持不变的原因。


    单击Request Contact按钮后就把当前页面选中的用户ID存储在Context.Items中,通过
Server.Transfer方法传递到下一个页面处理。


    URL
没有改变。

现在我们可以清楚地了解暂态的实用性,不过,如果被传递的数据更加复杂一些,暂态的优势会更加明显,比如被传递的是一个数据集或者是一个复杂的对象层次结构图。它不会遇到任何有关复杂数据集的视图状态性能问题(不管是在客户端还是服务器端),因为它能够传递任何类型的数据;同时,出为它会在请求完成处理过程后进行自动删除,所以它也不会像会话状态那样对服务器的可伸缩性强加任何威胁。基于这种情况,把值保存到请求中是很不明智的;这就是我们称它为暂态的原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值