1. ViewData: 以 ViewData["keyname"] = value 这样键值对的方式进行数据传送。在对应的 cshtml 中用 @ViewData["keyname"] 来获取值。
2. ViewBag: ViewBag 是 dynamic 类型的,是对 ViewData 的一人动态类型封装,用起来更方便,和 ViewData 共同操作一个数据 。在 Controller 中使用 ViewBag.keyname=value 来赋值,在 cshtml 中使用 @ViewBag.keyname 来获取值。如果 ViewData["name"] = "test", 则在 cshtml 文件中,可以使用 @ViewData["name"] 和 @ViewBag.name两种方式来获取值,因为 ViewData 和 ViewBag 共同操作一个数据。同理,如果 ViewBag.name = "test", 在 cshtml 中也可以用这两种方式。用 ViewBag传递数据非常方便,但是因为ASP.NET MVC 中的 HTML 辅助类等对于 ViewBag 有一些特殊约定(http://www.cnblogs.com/rupeng/p/5138575.html),所以尽量不要用 ViewBag,而是使用 Model。
3. Model:可以在 Controller 中通过 return View(model)赋值,然后在 cshtml 中通过 @Model 来访问这个对象。如果在 cshtml 中通过 “@model 类型" 指定类型,则 cshtml 中的Model 就是指定的强类型的,这样的 cshtml为“强类型视图”,如果没有指定 “@model 类型”,则 cshtml 中的 Model 就是 dynamic。例如一个类的为 WebApplication2.Models.TestModel, 则 “@model WebApplication2.Models.TestModel" 就表示 cshtml 中的Model 为 WebApplication2.Models命名空间下的 TestModel 类型。