3 回答
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 在这里和这里的工作方式,您有两个很好的问题
希望能帮助到你!
TA贡献1835条经验 获得超7个赞
TempData还是一个字典对象,在HTTP请求期间一直存在。因此,TempData可用于维护一个控制器动作与另一控制器动作之间的数据。
TempData每次用于检查空值。TempData包含两个方法keep()和peek(),用于维护从一个控制器动作到其他控制器动作的数据状态。
当 TempDataDictionary 对象被读取时,在请求的标记的结束作为删除到当前读取对象。
的保持()和PEEK()方法用于无缺失读取数据中的当前读取的对象。
当您始终想保留/阻止其他请求的值时,可以使用Peek()。当阻止/保持该值取决于其他逻辑时,可以使用Keep()。
TempData.Peek()和TempData.Keep()中的重载如下所示。
TempData.Keep()有2个重载方法。
void keep():威胁所有在当前请求完成时未删除的数据。
void keep(字符串键):借助名称将特定项保留在TempData中。
TempData.Peek()没有重载方法。
object peek(字符串键):返回一个对象,其中包含具有特定键的项目,而不需要删除键。
下面给出了TempData.Keep()和TempData.Peek()方法的返回类型的示例。
public void Keep(字符串键){_retainedKeys.Add(key); }
公共对象Peek(字符串键){对象值=值;返回值 }
- 3 回答
- 0 关注
- 782 浏览
添加回答
举报