首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET MVC中使用Tempdata -最佳实践

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

Stack Overflow用户
提问于 2012-09-14 18:44:31
回答 3查看 106K关注 0票数 76

我正在使用ASP.NET MVC3构建一个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

注意:我已经浏览了以下链接

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-14 22:56:52

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

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

希望这能有所帮助。

票数 75
EN

Stack Overflow用户

发布于 2015-06-30 18:21:07

请注意,从MVC3开始,TempData的持久化行为已经改变,现在TempData中的值被持久化,直到它被读取,而不仅仅是下一个请求。

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

票数 65
EN

Stack Overflow用户

发布于 2015-04-20 19:21:40

只需注意TempData持久性,这有点棘手。例如,如果您只是简单地读取当前请求中的TempData,它将被删除,因此您将无法在下一个请求中使用它。相反,您可以使用Peek方法。我推荐阅读这篇很酷的文章:

MVC Tempdata , Peek and Keep confusion

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12422930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档