TempDataDictionary
读取中的对象时,该对象将在该请求结束时标记为删除。
这意味着如果您在TempData上放一些东西
TempData["value"] = "someValueForNextRequest";
并且在您访问它的另一个请求中,该值将存在,但是一旦您将其读取,该值将被标记为删除:
object value = TempData["value"];
TempData["value"] == null
该Peek
和Keep
方法,使您无需将其标记为删除读取值。假设我们回到第一个将值保存到TempData的请求。
有了Peek
该值,而没有通过一次调用将其标记为删除,请参见msdn:
object value = TempData.Peek("value");
object value = TempData["value"];
用Keep
您指定要保留的标记为删除的密钥。检索对象并稍后保存以将其删除,这是两个不同的调用。参见msdn
object value = TempData["value"];
TempData.Keep("value");
object value = TempData["value"];
您可以Peek
在始终希望保留其他请求的值时使用。Keep
保留值时使用取决于其他逻辑。
关于TempData在这里和这里的工作方式,您有两个很好的问题
希望能帮助到你!
Peek()
允许您读取项目而不将其标记为删除,同时Keep()
允许您Revive
使用TempData词典中的所有值(使用Keep()
)或Keep("Key")
标记为删除的单个项目(使用)。我使用Keep()
逻辑流程中存在特定标准的情况,该标准产生了需要保留TempData的需要,否则应(在正常情况下)将其清除。例如:var query = TempData["Query"]; /* then somewhere down the road */ if(keepQueryForSomeReason) TempData.Keep("Query"); // this revives Query from "marked for deleted" state