ViewData和ViewBag允许您访问从控制器传递的视图中的任何数据。ViewBag,ViewData,TempData,Session - 如何以及何时使用它们?
这两者之间的主要区别在于您访问数据的方式。 在ViewBag中,您使用字符串作为键访问数据 - ViewBag [“numbers”] 在ViewData中,您正在使用属性 - ViewData.numbers访问数据。
的ViewData例如
CONTROLLER
var Numbers = new List<int> { 1, 2, 3 };
ViewData["numbers"] = Numbers;
VIEW
<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;
VIEW
<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"/>
在控制器的动作里面: 这可以在Web.config文件进行更改
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";
VIEW
@if (TempData["ClientAdded"] != null)
{
<h3>@TempData["ClientAdded"] </h3>
}
TempData的,当你想通过从视图到控制器的一些信息是有用的。例如,您希望在查看请求时保留时间。
VIEW
@{
TempData["DateOfViewWasAccessed"] = DateTime.Now;
}
控制器
if (TempData["DateOfViewWasAccessed"] != null)
{
DateTime time = DateTime.Parse(TempData["DateOfViewWasAccessed"].ToString());
}
感谢您的更多信息!这对大多数人应该是非常有用的。 – 2013-03-04 14:49:58
这里有个问题,还是这是一篇博文?回答你自己的问题很好,但它应该作为答案,而不是问题的一部分。更重要的是,这种材料已经被覆盖过,比如[ViewData,ViewBag,Session,TempData的正确时间是什么](http://stackoverflow.com/questions/12676924/what-is-the-right-time -for-viewdata-viewbag-session-tempdata) – 2013-03-04 15:26:27
我会记住,对于未来和抱歉。我试图给出更多的例子,也许一些更有经验的开发人员也分享他们的经验。 – 2013-03-04 16:24:52