c# – ViewBag,ViewData,TempData,Session – 如何和何时使用它们?

前端之家收集整理的这篇文章主要介绍了c# – ViewBag,ViewData,TempData,Session – 如何和何时使用它们?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
ViewData和ViewBag允许您访问从控制器传递的视图中的任何数据.

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

ViewData示例

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,3 };

         ViewBag.numbers = Numbers;

视图

<ul>

@foreach (var number in ViewBag.numbers)

{
<li>@number</li> 
}

</ul>

会话是另一个非常有用的对象,它将保存任何信息.

例如,当用户登录系统时,您想要保持其授权级别.

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

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

只要用户会话处于活动状态,该信息将被存储在会话中.
这可以在Web.config文件中更改:

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

那么在控制器里面的动作:

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?

ViewBag

躲开它.可以使用视图模型.

行动

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

查看(剃刀语法)

@ViewBag.SomeProperty

ViewData的

放弃它可以使用视图模型.

行动

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

查看(剃刀语法):

@ViewData["SomeProperty"]

温度数据

您在TempData中存储的所有内容将保留在tempdata中,直到您读取它,无论两者之间是否有一个或多个HTTP请求.

操作

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


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

猜你在找的C#相关文章