TempData keep()对偷看()

Keep ()和 eek ()之间的区别是什么?

MSDN 表示:

  • Keep () : marks the specified key in the dictionary for retention.
  • 偷看() : < code > 返回一个对象,该对象包含 与指定的密钥关联,而不将该密钥标记为 删除

我不知道它们之间有什么区别,它们不都为另一个请求保留一个值吗?

174217 次浏览

难道他们不会为另一个请求保留价值吗?

是的,但是当第一个是 void时,第二个返回并且 object:

public void Keep(string key)
{
_retainedKeys.Add(key); // just adds the key to the collection for retention
}


public object Peek(string key)
{
object value;
_data.TryGetValue(key, out value);
return value; // returns an object without marking it for deletion
}

当读取 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

PeekKeep方法允许您读取该值,而不需要将其标记为删除。假设我们回到第一个请求,该值被保存到 TempData。

使用 Peek,您可以得到该值,而不需要通过一次调用将其标记为删除,参见 我不知道:

//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可以指定要保留的标记为删除的键。检索对象以及随后从删除中保存它是两个不同的调用。见 我不知道

//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 如何工作 给你给你,您有两个很好的问题

希望能有帮助!

刚刚理解完 Peek 和 Keep,一开始也有同样的困惑。由于 TempData 在不同的条件下表现不同,因此产生了混淆。你可以观看这个视频,其中解释了保持和偷看与示范 https://www.facebook.com/video.php?v=689393794478113

Tempdata 有助于为单个请求保留值,为下一个请求保留 也可以保存值,具体取决于 4个条件”。

如果我们理解了这4点,你会看得更清楚。下面是一个图表与所有4个条件,阅读第三和第四点谈论偷看和保持。

enter image description here

条件1(未读) :- 如果在操作中设置了“ TempData”,并且在视图中没有读取它,那么“ TempData”将在下一个请求中持久化。

条件2(正常读取) :- 如果您像下面的代码一样正常读取“ TempData”,它将不会为下一个请求持久化。

string str = TempData["MyData"];

即使你正在显示它是一个正常的读像下面的代码。

@TempData["MyData"];

条件3(读取并保持) :- 如果您读取“ TempData”并调用“ Keep”方法,它将被持久化。

@TempData["MyData"];
TempData.Keep("MyData");

条件4(Peek 和 Read) :- 如果您使用“ Peek”方法读取“ TempData”,它将为下一个请求保持。

string str = TempData.Peek("Td").ToString();

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

TempData 也是一个字典对象,在 HTTP 请求。因此,TempData 可用于维护一个 控制器操作转换为其他控制器操作。

每次使用 TempData 检查 null 值 两个方法 keep ()和 eek ()用于从一个方法维护数据状态 控制器对其他人的作用。

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

保持()偷看方法用于读取数据而不删除 当前读取对象。

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

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

Keep () 有2个重载方法。

  1. Void 留着() : 威胁当前请求完成时未删除的所有数据。

  2. Void 留着(string key) : 使用 name 保存 TempData 中的特定项目。

没有重载的方法。

  1. 对象 偷看(string key) : 返回一个对象,其中包含具有特定键的项,但不设置删除键。

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

Public void 留着吧(字符串键){ _ retainedKeys. Add (key) ; }

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

方法将字典中指定的键标记为保留

当阻止/保持值取决于其他逻辑时,可以使用 Keep ()。

当您读取 TempData 1并希望保留另一个请求时,请使用 keep 方法,这样 TempData 就可以像上面的例子那样用于下一个请求。