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)
该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"];
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如何在这里和这里工作,你有两个很好的问题
希望能帮助到你!
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
TempData也是一个字典对象,它保留HTTP请求的时间.因此,TempData可用于维护一个控制器操作与另一个控制器操作之间的数据.
TempData用于每次检查空值.TempData包含两个方法keep()和peek(),用于维护从一个控制器操作到其他控制器操作的数据状态.
当 读取TempDataDictionary对象时,请求结束时标记为删除当前读取对象.
的保持()和PEEK()方法用于无缺失读取数据中的当前读取的对象.
当您总是希望保留/阻止另一个请求的值时,可以使用Peek().当阻止/保持值取决于附加逻辑时,可以使用Keep().
在TempData.Peek()和TempData.Keep()中重载,如下所示.
TempData.Keep()有2个重载方法.
void keep():威胁当前请求完成时未删除的所有数据.
void keep(string key):在名称的帮助下保留TempData中的特定项.
TempData.Peek()没有重载方法.
TempData.Keep()和TempData.Peek()方法的返回类型示例如下所示.
public void Keep(string key){_ retainedKeys.Add(key); }
public object Peek(string key){object value = values; 回报值; }
| 归档时间: |
|
| 查看次数: |
110260 次 |
| 最近记录: |