在ASP.NET MVC中使用的TempData - 最佳实践(Using Tempdata in

2019-06-18 04:22发布

我使用ASP.NET MVC 3,以构建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会议
  • http://www.gregshackles.com/2010/07/asp-net-mvc-do-you-know-where-your-tempdata-is/

谢谢

Answer 1:

TempData是一个桶,你可以转储只需要为下请求数据。 也就是说,任何你投入的TempData是下一个请求完成后丢弃。 这是一次性的消息,诸如形式验证错误是有用的。 采取这里要注意的重要一点是,这适用于在会话的下一个请求,这样的请求可以在不同的浏览器窗口或标签可能发生。

为了回答您的具体问题:有使用它没有正确的方式。 这一切都以实用性和便利性。 如果它的工作原理,是有道理的和其他人了解它比较容易,这是很好的。 在您的特定情况下,一个参数的传递这种方式是好的,但它是奇怪,你需要做的(代码味道?)。 我宁愿保持资源这样一个值(如果它是一个资源)或数据库(如果它是一个持久的价值)。 从您的使用情况,这似乎是一种资源,因为你使用它的页面标题。

希望这可以帮助。



Answer 2:

请注意,MVC 3起TempData的持续存在行为发生了变化,现在在TempData的值持续,直到它被读取,而不只是为下一个请求。

TempData的价值仍然存在,直到它被读取或直到会话超时。 这样坚持的TempData使场景,如重定向,因为TempData的值就可以超越单个请求。 https://msdn.microsoft.com/en-in/library/dd394711%28v=vs.100%29.aspx



Answer 3:

要知道TempData的持久性的,这是一个有点棘手。 例如,如果你甚至根本看TempData的当前请求里面,它会被删除,因此你不必为它的下一个请求。 相反,你可以使用Peek方法。 我会推荐阅读这篇文章爽:

MVC的TempData,皮克和保持混乱



文章来源: Using Tempdata in ASP.NET MVC - Best practice