gpt4 book ai didi

c# - ViewBag、ViewData、TempData、Session - 如何以及何时使用它们?

转载 作者:可可西里 更新时间:2023-11-01 07:54:48 25 4
gpt4 key购买 nike

ViewData 和 ViewBag 允许您访问 View 中从 Controller 传递的任何数据。

这两者之间的主要区别在于您访问数据的方式。在 ViewBag 中,您使用字符串作为键访问数据 - ViewBag[“numbers”]在 ViewData 中,您使用属性访问数据 - ViewData.numbers。

查看数据示例

Controller

 var Numbers = new List<int> { 1, 2, 3 };

ViewData["numbers"] = Numbers;

查看

<ul>
@foreach (var number in (List<int>)ViewData["numbers"])
{
<li>@number</li>
}

</ul>

ViewBag例子

Controller

 var Numbers = new List<int> { 1, 2, 3 };

ViewBag.numbers = Numbers;

查看

<ul>

@foreach (var number in ViewBag.numbers)

{
<li>@number</li>
}

</ul>

Session 是另一个非常有用的对象,可以保存任何信息。

例如,当用户登录到系统时,您希望保留他的授权级别。

// GetUserAuthorizationLevel - some method that returns int value for user authorization level.

Session["AuthorizationLevel"] = GetUserAuthorizationLevel(userID);

只要用户 session 处于事件状态,此信息就会存储在 session 中。这可以在 Web.config 文件中更改:

<system.web>
<sessionState mode="InProc" timeout="30"/>

然后在 Controller 内部的 Action 中:

 public ActionResult LevelAccess()
{
if (Session["AuthorizationLevel"].Equals(1))
{
return View("Level1");
}

if (Session["AuthorizationLevel"].Equals(2))
{
return View("Level2");
}

return View("AccessDenied");
}

TempData 与 ViewData 和 ViewBag 非常相似,但它只包含一个请求的数据。

Controller

//你创建了一个添加新客户端的方法。

TempData["ClientAdded"] = "Client has been added";

查看

@if (TempData["ClientAdded"] != null)
{
<h3>@TempData["ClientAdded"] </h3>
}

当您想将一些信息从 View 传递到 Controller 时,TempData 很有用。例如,您希望在请求查看时保持时间。

查看

@{
TempData["DateOfViewWasAccessed"] = DateTime.Now;
}

Controller

if (TempData["DateOfViewWasAccessed"] != null)
{
DateTime time = DateTime.Parse(TempData["DateOfViewWasAccessed"].ToString());
}

最佳答案

ViewBag, ViewData, TempData, Session - how and when to use them?

查看包

避免它。尽可能使用 View 模型。

原因是当你使用动态属性时你不会得到编译错误。无意或有意更改属性名称然后忘记更新所有用法真的很容易。

如果您使用 ViewModel,就不会遇到这个问题。 View 模型还将调整 MVC 中的“M”(即业务实体)的责任从 Controller 和 View 转移到 ViewModel,因此您可以获得职责明确的更简洁的代码。

Action

public ActionResult Index()
{
ViewBag.SomeProperty = "Hello";
return View();
}

View (razor 语法)

@ViewBag.SomeProperty

查看数据

避免它。尽可能使用 View 模型。与 ViewBag 相同的原因。

Action

public ActionResult Index()
{
ViewData["SomeProperty"] = "Hello";
return View();
}

View (razor 语法):

@ViewData["SomeProperty"]

临时数据

您存储在 TempData 中的所有内容都将保留在临时数据中,直到您读取它,无论其间是否有一个或多个 HTTP 请求。

Action

public ActionResult Index()
{
TempData["SomeName"] = "Hello";
return RedirectToAction("Details");
}


public ActionResult Details()
{
var someName = TempData["SomeName"];
}

关于c# - ViewBag、ViewData、TempData、Session - 如何以及何时使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15203870/

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