TempData keep()vs peek()

Gha*_*san 62 asp.net-mvc tempdata

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.

我无法得到真正的不同之处,难道他们都没有为另一个请求保留价值吗?

Dan*_*.G. 124

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

这意味着如果你把一些东西放在TempData上就好了

TempData["value"] = "someValueForNextRequest";
Run Code Online (Sandbox Code Playgroud)

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

//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
Run Code Online (Sandbox Code Playgroud)

PeekKeep方法,使您无需将其标记为删除读取值.假设我们回到第一个将值保存到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"];
Run Code Online (Sandbox Code Playgroud)

Keep您指定要保留的标记为删除的键时.检索对象以及稍后将其保存为删除是2个不同的调用.见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"];
Run Code Online (Sandbox Code Playgroud)

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

关于TempData如何在这里这里工作,你有两个很好的问题

希望能帮助到你!

  • 非常感谢!现在超级明了:) (2认同)

Shi*_*ala 43

刚刚完成了对Peek和Keep的理解,最初也有同样的困惑.由于TempData在不同条件下表现不同,因此产生了混淆.您可以观看此视频,其中演示了Keep and Peek演示https://www.facebook.com/video.php?v=689393794478113

Tempdata有助于保留单个请求的,并且还可以根据4个条件保留下一个请求的 ".

如果我们理解这4点你就会看到更清晰.下面是一个包含所有4个条件的图表,阅读第三和第四点,其中讨论了Peek和Keep.

在此输入图像描述

条件1(未读取): -如果在操作中设置了"TempData",并且如果在视图中没有读取它,则"TempData"将保留用于下一个请求.

条件2(正常读取): -如果您通常像下面的代码一样读取"TempData",它将不会持续用于下一个请求.

string str = TempData[“MyData”];
Run Code Online (Sandbox Code Playgroud)

即使您正在显示它,也可以像下面的代码一样进行正常读取.

@TempData[“MyData”];
Run Code Online (Sandbox Code Playgroud)

条件3(读取和保持): -如果您阅读"TempData"并调用"保持"方法,它将被保留.

@TempData[“MyData”];
TempData.Keep(“MyData”);
Run Code Online (Sandbox Code Playgroud)

条件4(Peek和Read): -如果您使用"Peek"方法读取"TempData",它将持续用于下一个请求.

string str = TempData.Peek("Td").ToString();
Run Code Online (Sandbox Code Playgroud)

参考文献: - http://www.codeproject.com/Articles/818493/MVC-Tempdata-Peek-and-Keep-confusion


Ani*_*ngh 5

TempData也是一个字典对象,它保留HTTP请求的时间.因此,TempData可用于维护一个控制器操作与另一个控制器操作之间的数据.

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

当 读取TempDataDictionary对象时,请求结束时标记为删除当前读取对象.

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

当您总是希望保留/阻止另一个请求的值时,可以使用Peek().当阻止/保持值取决于附加逻辑时,可以使用Keep().

在TempData.Peek()和TempData.Keep()中重载,如下所示.

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

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

  2. void keep(string key):在名称的帮助下保留TempData中的特定项.

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

  1. object peek(string key):返回一个包含具有特定键的项的对象,而不进行删除键.

TempData.Keep()和TempData.Peek()方法的返回类型示例如下所示.

public void Keep(string key){_ retainedKeys.Add(key); }

public object Peek(string key){object value = values; 回报值; }