ASP.NET MVC中用ViewBag、ViewData、Mmodel从控制器向视图传递数据
本帖最后由 Naylor 于 2017-6-7 13:26 编辑首先,我们先来说说ASP.NET MVC中控制器和视图的职责,简单来说控制器的责任是为视图模板提供必须的数据或对象,用来绘制HTML响应浏览器,ASP.NET MVC 中的前台页面采用的渲染方式是服务器端渲染。一个最佳实践是:视图模板从来不参与业务逻辑,或直接与数据库交互。相反的,视图模板仅与控制器提供的数据一起工作。保持这种“关注点分离(separation of concerns)”有助于保持代码的整洁,可测试性和更容易维护,关注点分离也是MVC编程模式的思想核心。
一、ViewBag和ViewData的相同点和不同点。
相同点在ASP.NET MVC程序设计中,控制器向视图传递数据常常会用到ViewData、ViewBag,两者都依赖于ControllerBase类,ViewData是一个字典集合,通过key值读取对应的value;ViewBag是动态类型(编译期间为dynamic类型,运行期间为object类型),作用和ViewData类似,都可用来存储和传递信息。ViewBag和ViewData只在当前Action中有效,即同一View。
不同点ViewData是字典类型,ViewBag是动态类型,导致ViewData在使用的时候需要进行类型的转换,不然编译不通过;ViewBag可读性更加好,依赖于更高的.NET Framework版本(4.0)。ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value, ViewData[“Key”],ViewBag为动态类型,赋值直接为其添加属性值;
注:ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData
二、用Model传递数据
Model的实现依赖于ViewResult 类,严格意义上讲Model方式和前面两种是完全不同的方式。通过在view方法及其重载中加入Model对象,可将控制器数据传递到视图中,Model为object数据类型。在实际使用过程中Mmodel通常传递的是实体数据模型。在View中添加强类型命名空间,访问Mmodel数据的时候就可以简单并方便的使用对象点属性名来提取数据了。
三、ViewBag和ViewData和Mmodel在使用时候的取舍
官方没有说哪一种方式是专门设计出来来应用于特定场景的,使用时取决于行业规范和个人及团队的编程习惯。从性能角度来说Mmodel>ViewData>ViewBag,原因是强类型性能上面更优于弱类型。
四、备注
以上内容结合了MSDN和博客园上面多篇文档及自己的理解,如有错误地方,希望批评指正。 不錯的文章
請持續..
{:1_921:} 喜欢上博客园,质量确实不错,。 混着用,传实体用ViewModel,有些需要的参数就用viewBag,因为"."比"[]"好写,所以不用ViewData 今天写同一个控制器不同action数据传输用tempData["id"]
页:
[1]