在ASP.NET MVC中使用Tempdata – 最佳实践

我正在使用ASP.NET MVC 3来构build一个Web应用程序。

我想要做的是传递两个控制器之间的值,但有很多方法可以做到这一点,我特别感兴趣的是使用TempData

 public ActionResult Action1() { string someMessage; Test obj = SomeOperation(); if(obj.Valid) { someMessage = obj.UserName; } else { someMessage = obj.ModeratorName; } TempData["message"] = someMessage; return RedirectToAction("Index"); } public ActionResult Index() { ViewBag.Message = TempData["message"] return View(); } 

那么在这里使用TempData是否正确? 我的意思是最好的编程实践是使用TempData正确方法?

在什么情况下应该使用TempData

注:我已经通过以下链接

  • 何时在ASP.Net MVC中使用TempData vs Session
  • http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

谢谢

TempData是一个存储区,您可以转储仅用于以下请求的数据。 也就是说,在下一个请求完成后,放入TempData的任何内容都将被丢弃。 这对于一次性消息很有用,比如表单validation错误。 这里要注意的重要一点是,这适用于会话中的下一个请求,以便请求可能发生在不同的浏览器窗口或选项卡中。

要回答你的具体问题:没有正确的方法来使用它。 这完全取决于可用性和便利性。 如果有用,有道理,而其他人则相对容易理解,这是很好的。 在你的具体情况下,通过这种方式传递参数是好的,但奇怪的是,你需要这样做(代码气味?)。 我宁愿在资源(如果是资源)或数据库(如果它是一个持久的值)保持这样的值。 从你的使用,这似乎是一个资源,因为你用它的页面标题。

希望这可以帮助。

请注意,MVC 3以前的TempData的持久性行为已经改变了,现在TempData中的值被持久化直到被读取,而不仅仅是下一个请求。

TempData的值一直保持到读取或直到会话超时为止。 以这种方式持久化TempData可以实现redirect等场景,因为TempData中的值可以在单个请求之外使用。 https://msdn.microsoft.com/en-in/library/dd394711%28v=vs.100%29.aspx

只要知道TempData持久性,这有点棘手。 例如,如果您甚至简单地读取当前请求中的TempData,它将被删除,因此您没有为下一个请求。 相反,你可以使用Peek方法。 我会推荐阅读这个很酷的文章:

MVC Tempdata,Peek和保持混淆