Tempdata keep与peek

MSDN:

  • keep(): marks the specified key in the dictionary for retention.
  • peek(): returns an object that contains the element that is associated with the specified key, without marking the key for deletion.

个人理解:

  • keep(): 将已标记为删除状态的键 恢复为原状态
  • peek(): 请求一次,键的状态不变

案例:

结果打断点调试,总结以下几点

  • 定义
TempData["msg"] = "this is message for tempdata";
  •  第一次请求
object msg = TempData["msg"];

       请求成功,msg能够接受到“this is message for tempdata”

  • 第二次请求 

        请求失败,返回null值

!注意:

    如果在TempData的定义作用域中发起调用,无论有多少个调用都不会失败,例如

以上代码中,msg、msg2都能正常的获取值

原因:读取TempDataDictionary中的对象时,该对象将在该请求结束时标记为删除。

看一下流程:

可以看见TempDataDictionary对象[图片来自Stack Overflow,TempData Set应该是有误的]有三种读取方式:Not Read、Peek Read以及Normal Read

Not Read和Peek Read之后会进入Persisted状态,等待下一次请求

而Normal Read之后有一个分路,如果选择keep,即可进入Persisted,我们不妨称其复活

而如果不采取任何手段,将被标记成Deleted,最终删除

至此,peek及keep的区别一目了然

 

其中TempDataDictionary为keep提供了两个重载方法:

一个是复活(保留)dictionary中的所有键,一个将指定键加入到HashSet保留集中

@TempData["msg"];
TempData.Keep("msg");

peek只提供了一个方法:

根据键返回对应的值,若没有该键将返回默认值。该方法不会使得改键被标记删除,而是直接进入Persisted

string str = TempData.Peek("msg").ToString();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值