在ASP.NETMVC中使用Tempdata-最佳实践是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我正在使用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使用?

我通过以下链接

提问于
用户回答回答于

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

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

用户回答回答于

请注意,MVC 3之后的TempData的持久性行为已经发生了变化,现在TempData中的值持续存在直到它被读取,而不仅仅是下一个请求。

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

扫码关注云+社区