一、控制器向视图传值(一)
1、控制器向视图传递数据,常见三种为:
1) ViewData
2) ViewBag
3) TempData
其中ViewData与ViewBag为同一集合,仅存在语法上的差异。
2、ViewData:
只在一次HTTP请求中有效,当请求结束后会自动清空其值;生命周期短,类似WebForm的Page对象,因此无法跨Action方法传递数据。
3、TempData:
TempData利用Session保存数据;生命周期长,可以跨Action方法传递数据,但读取一次后会自动清除。
4、ViewBag:
ViewBag属性返回的实际类型为ExpandoObject,此类型允许动态添加成员,因此将返回类型定义为dynamic可以避免编译期的语法检查。
二、控制器向视图传值
1、ViewDataDictionary集合的元素类型为object,所以可以把实体对象集合放入ViewData对象或ViewBag对象中传递至View视图页。
2、Action中的View()方法可以接受object数据,所以也可以把实体对象集合传递至View视图页,通过视图的Model属性取回。
三、视图传值到控制器
1、ASP.NET MVC的底层框架是ASP.NET,因此以前学习过的系统对象仍然可以使用。
2、视图传值到控制器
1)视图以GET方式提交的数据,在Action方法中通过Request对象的QueryString集合获取
2)视图以POST方式提交的数据,在Action方法中通过Request对象的Form集合获取
3、当分别以get、post两次请求同名Action时,post对应的Action必须以[HttpPost]修饰。
四、综合案例
1、多种传值方式的应用场景:
1)ViewData:适合传递单个数据,需要类型转换
2)ViewBag:适合传递单个数据,不需要类型转换
3)TempData:主要用于跨多个动作方法传递数据
4)View()方法传参:适合传递模型数据,强类型视图中不需要类型转换