为了账号安全,请及时绑定邮箱和手机立即绑定

TempData keep()与peek()

TempData keep()与peek()

一只名叫tom的猫 2019-11-26 14:34:01
keep()和peek()有什么区别?MSDN说:保持(): marks the specified key in the dictionary for retention.窥视(): returns an object that contains the element that is associated with the specified key, without marking the key for deletion.我不能真正知道有什么区别,难道它们都为另一个请求保留了价值吗?
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

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


这意味着如果您在TempData上放一些东西


TempData["value"] = "someValueForNextRequest";

并且在您访问它的另一个请求中,该值将存在,但是一旦您读取它,该值将被标记为删除:


//second request, read value and is marked for deletion

object value = TempData["value"];


//third request, value is not there as it was deleted at the end of the second request

TempData["value"] == null

该Peek和Keep方法,使您无需将其标记为删除读取值。假设我们回到第一个将值保存到TempData的请求。


有了Peek该值,而没有通过一次调用将其标记为删除,请参见msdn:


//second request, PEEK value so it is not deleted at the end of the request

object value = TempData.Peek("value");


//third request, read value and mark it for deletion

object value = TempData["value"];

用Keep您指定要保留的标记为删除的密钥。检索对象并随后保存以将其删除,这是两个不同的调用。参见msdn


//second request, get value marking it from deletion

object value = TempData["value"];

//later on decide to keep it

TempData.Keep("value");


//third request, read value and mark it for deletion

object value = TempData["value"];

您可以Peek在始终希望保留其他请求的值时使用。Keep保留值时使用取决于其他逻辑。


关于TempData 在这里和这里的工作方式,您有两个很好的问题


希望能帮助到你!


查看完整回答
反对 回复 2019-11-26
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

TempData还是一个字典对象,在HTTP请求期间一直存在。因此,TempData可用于维护一个控制器动作与另一控制器动作之间的数据。

TempData每次用于检查空值。TempData包含两个方法keep()和peek(),用于维护从一个控制器动作到其他控制器动作的数据状态。

当 TempDataDictionary 对象被读取时,在请求的标记的结束作为删除到当前读取对象。

保持()PEEK()方法用于无缺失读取数据中的当前读取的对象。

当您始终想保留/阻止其他请求的值时,可以使用Peek()。当阻止/保持该值取决于其他逻辑时,可以使用Keep()

TempData.Peek()和TempData.Keep()中的重载如下所示。

TempData.Keep()有2个重载方法。

  1. void keep():威胁所有在当前请求完成时未删除的数据。

  2. void keep(字符串键):借助名称将特定项保留在TempData中。

TempData.Peek()没有重载方法。

  1. object peek(字符串键):返回一个对象,其中包含具有特定键的项目,而不需要删除键。

下面给出了TempData.Keep()和TempData.Peek()方法的返回类型的示例。

public void Keep(字符串键){_retainedKeys.Add(key); }

公共对象Peek(字符串键){对象值=值;返回值 }


查看完整回答
反对 回复 2019-11-26
  • 3 回答
  • 0 关注
  • 782 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信