c# – ViewBag,ViewData,TempData,Session – 如何和何时使用它
ViewData和ViewBag允许您访问从控制器传递的视图中的任何数据.
这两者之间的主要区别是您访问数据的方式. 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); 只要用户会话处于活动状态,该信息将被存储在会话中. <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 躲开它.可以使用视图模型. 行动 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"]; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |