gpt4 book ai didi

asp.net-mvc - ViewData、ViewBag、Session、TempData 什么时间合适

转载 作者:行者123 更新时间:2023-12-03 07:00:20 25 4
gpt4 key购买 nike

我正在编辑一个项目,我在一个 Controller 方法中看到了 Session[""],在另一个 Controller 方法中看到了 TempData[""]。这 4 种方法之间有区别吗?或者只是 4 种方法来做同样的事情。

最佳答案

  • ViewData/ViewBag - 仅在当前请求期间有效。
    您在 Controller 操作中设置它并在 View 中使用它,然后它就会消失。
    区别在于,第一个是字典,而第二个只是该字典的动态包装器。
    不过,两者都指向相同的数据。
    ViewBag 是在 ASP.NET MVC 3 中引入的。

示例:

public ActionResult Index()
{
ViewData["foo"] = "bar";
return View();
}

在 View 中您可以使用这个值:

<div>@ViewData["foo"]</div>

与 ViewBag 相同,但它是动态的:

public ActionResult Index()
{
ViewBag.foo = "bar";
return View();
}

在 View 中您可以使用这个值:

<div>@ViewBag.foo</div>

正如您所看到的,与使用 View 模型的经典和推荐方法相比,ViewData/ViewBag 只是从 Controller 操作将信息传递到 View 的另一种方法:

public class MyViewModel
{
public string Foo { get; set; }
}

然后:

public ActionResult Index()
{
var model = new MyViewModel { Foo = "bar" };
return View(model);
}

在你的强类型 View 中:

@model MyViewModel
<div>@Html.DisplayFor(x => x.Foo)</div>

正如您所看到的,使用 View 模型提供了一种强类型方法,可以将信息从 Controller 操作传递到 View 。

  • TempData - 它允许在单个后续请求的持续时间内保留信息。您可以在 TempData 中存储一些内容,然后进行重定向。在您重定向到的目标 Controller 操作中,您可以检索存储在 TempData 内的值。

示例:

public ActionResult Foo()
{
TempData["foo"] = "bar";
return RedirectToAction("bar");
}

public ActionResult Bar()
{
var value = TempData["foo"] as string;
// use the value here. If you need to pass it to the view you could
// use ViewData/ViewBag (I can't believe I said that but I will leave it for the moment)
return View();
}

一旦您读取了 TempData 中存储的值,ASP.NET MVC 就会自动使其过期。在幕后,ASP.NET MVC 将信息保存到 Session 中。

  • session - 与 TempData 相同,只是它永不过期 - 它将对所有请求有效,而不是单个重定向。

关于asp.net-mvc - ViewData、ViewBag、Session、TempData 什么时间合适,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com