ViewBag:
本质上市一个字典,提供了一种View可以访问的动态数据存储。这里用到了.NET 4.0的动态语言特性。可以给ViewBag添加任意属性,并且这个属性是动态创建的,不需要修改类的定义就可以从View中访问。
View模板显示页面的规则是先找对应的Controller文件夹,再找到对应的Shared文件夹中所有继承自viewpage的页面。
控制器的约定:
⑴、Controller放到controllers文件夹中,并且命名方式以Controller结尾。
⑵、每个Controller都对应View中的一个文件夹,文件夹的名称跟Controller名相同。Controller中的方法名都对应一个View视图(非必须,但是建议这么做)而且View的名字跟Action的名字相同。
⑶、控制器必须是非静态类,并且要实现IController接口。
⑷、Controller类型可以放到其他项目中。
视图的相关约定:
⑴、所有的视图必须放到Views目录下。
⑵、不同控制器的视图用文件夹进行分割,每个控制器都对应一个视图目录。
⑶、一般视图名字跟控制器的Action相对应(非必须)。
⑷、多个控制器公共的视图放到Shared目录中。
View和Action之间数据传递的方式:
-
- 弱类型ViewData[“”]
- 动态型ViewBag//dynamic
- 动态类型Model
- 临时存储TempData[""]
- 后台:return View(data)://存入ViewData.Model
- 前台:Model // 其实就是WebViewPage.Model
TempData、ViewData和ViewBag的区别:
ViewData是字典型的(Dictionary),ViewBag不再是字典的键值对结构,而是dynamic(动态)型,会在程序运行的时候动态解析。
ViewData为Object型,而ViewBag为dynamic(动态)型。dynamic和object型的区别是在使用时它会自动根据数据类型转换,而object型则需要我们自己去强制转换。
理论上ViewBag要比ViewData慢一点点,但是几乎可以忽略,所以使用何种方式完全取决于个人的爱好。
TempData的使用同ViewData和ViewBag一样,TempData也可以用来向视图传递数据,只是ViewData和ViewBag的生命周期和View相同,它们只对当前View有用。
TempData则可以在不同的Action中进行传值,类似Webform里的Session。有一点需要注意,TempData的值在取了一次后会自动删除。
TempData用来在一次请求中同时执行的多个Action方法之间共享数据。