ASP.NET MVC中viewDataviewBag和templateData的使用与区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET MVC中viewDataviewBag和templateData的使用与区别相关的知识,希望对你有一定的参考价值。

一:类型比较

1.1)ViewBag是动态类型(dynamic)。

1.2)ViewData是一个字典型的(Dictionary)-->TempDataDictionary。

1.3)TempData是一个字典型的(Dictionary)-->ViewDataDictionary。

 

二:生命周期和作用域

2.1)ViewBag生命周期和View相同,只能作用于一个View。

2.2)ViewData生命周期和View相同,只能作用于一个View。

2.3)TempData生命周期为被调用前一直存在,但是调用一次的后值就会被删除,且可以在不同的Action中进行传值。

TempData  保存在Session中,Controller每次执行请求的时候,会从Session中先获取 TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删 除。具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从 ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。

 

三:使用区别

3.1)viewBag不需要数据转换

Controller: ViewBag.key = new Dictionary<string, string>();

View :

@foreach (var item in ViewBag.key)
{
@item;
}

 

3.2)ViewBag中查询数据是需要转换数据类型

Controller: ViewData["key"] = new Dictionary<string, string>() { { "key1", "value1" }, { "key2", "value2" } };

View :

@foreach (var item in ViewData["key"] as Dictionary<string, string>)
{
@item;
}

 

3.3)TempData使用和ViewBag一样,但是注意TempData对应的值只要被调用一次后就会被自动清空。

 

以上是关于ASP.NET MVC中viewDataviewBag和templateData的使用与区别的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC教程五:ASP.NET MVC中的路由

七天学会ASP.NET MVC ——ASP.NET MVC 数据传递

ASP.NET MVC 和 Angularjs 与 ASP.NET MVC 和 Reactjs

七天学会ASP.NET MVC ——ASP.Net MVC 数据处理

ASP.NET中MVC的理解

ASP.NET-MVC中Entity和Model之间的关系