转自:http://hi.baidu.com/qq409982078/blog/item/f664ce8677ae598bf703a627.html
ViewData 和 TempData 都可以传递弱类型数据,区别如下:
ViewData 只在当前 Action 中有效,生命周期和 View 相同;
TempData 的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。
TempData 一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。
Index
public ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewData["myName"] = "我的名字";
TempData["myAgeOne"] = "26岁";
TempData["myAgeTwo"] = "27岁";
return View();
}
姓名:@ViewData["myName"]
<br />
年龄1:@TempData["myAgeOne"]
About
姓名:@ViewData["myName"]
<br />
年龄1:@TempData["myAgeOne"]
<br />
年龄2:@TempData["myAgeTwo"]
ViewBag.Name=ViewData["Name"];
相同:使用同一个字典集合(数据源)
不同:ViewBag 是 MVC3 新增语法,ViewBag 不再是字典的键值对结构,而是 dynamic 动态类型,它会在程序运行的时候动态解析。
Dynamically Typed Object 动态类型
C#4.0加入了dynamic关键字,可以申明一个变量的static类型为dynamic。
使用dynamic的好处在于,可以不去关心对象是来源于COM, IronPython, HTML DOM或者反射,只要知道有什么方法可以调用就可以了,剩下的工作可以留给runtime。
参考资料
http://www.cnblogs.com/palo/archive/2009/03/01/1400949.html