吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6284|回复: 4
收起左侧

[其他转载] ASP.NET MVC中用ViewBag、ViewData、Mmodel从控制器向视图传递数据

[复制链接]
Naylor 发表于 2017-6-7 13:16
本帖最后由 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热心值 +1 收起 理由
bingw001 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

psx1lin 发表于 2017-6-8 06:07
不錯的文章
請持續..

qq6227575 发表于 2017-6-26 19:11
吸金瓶子 发表于 2018-1-11 17:44
混着用,传实体用ViewModel,有些需要的参数就用viewBag,因为"."比"[]"好写,所以不用ViewData
吸金瓶子 发表于 2018-1-12 15:34
今天写同一个控制器不同action数据传输用tempData["id"]
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 05:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表