zoukankan      html  css  js  c++  java
  • ASP.NET MVC ViewData/ViewBag 简单小结

    近期在项目中遇到一个问题,就是用ViewBag.Model存储匿名对象传递给View,但是需要根据条件给匿名对象添加属性,这个可真心不易,Google了一下发现很多方案都是动态编译神马的,感觉好高大上,最后也没采用,因为不知道动态编译的性能消耗大不大。

    最后是自己简单研究了一下,在ViewBag.Model中存储了Dictionary<string, object>,在View通过Model[key]的方式可以正常读取相应的值,在此对ViewData和ViewBag的使用进行一个简单的小结:
    1、ViewData.Model 可以存储普通对象、匿名对象,或Dictionary等;
    2、ViewData 本身是一个Dictionary;
    3、ViewData.Model 存储匿名对象需要动态追加属性时,可以使用Dictionary;
    4、ViewData.Model 和 ViewData["Model"] 是等效的;
    5、ViewBag是ViewData的一个dynamic包装的马甲,即 ViewBag.Name 与 ViewData["Name"] 相同。

    由于ViewData和ViewBag是使用dynamic对象存储的值,所以进一步引申了一下对dynamic的小结:
    1、如果dynamic变量中存储的是普通对象,则可以使用普通的“变量名.对象属性名”方式取属性值;
    2、如果dynamic变量中存储的是Dictionary,则可以使用“变量名[Key]”的方式取Value;
    3、如果dynamic变量中存储的是已知类型的对象,可以像操作相应类型对象的方式进行操作;
    4、如果dynamic变量中存储的是匿名对象,只能通过反射取值了。

    以上观点只代表本人的肤浅认识,欢迎大牛们拍砖。

  • 相关阅读:
    进阶之路 | 奇妙的Drawable之旅
    进阶之路 | 奇妙的Animation之旅
    进阶之路 | 奇妙的四大组件之旅
    Laravel
    Laravel 入门
    面试:给我说说你平时是如何优化MySQL的?
    EXPLAIN 查看 SQL 执行计划
    常见的图文布局
    常见的图文布局
    CSS3 的 filter(滤镜) 属性
  • 原文地址:https://www.cnblogs.com/rangeon/p/3900816.html
Copyright © 2011-2022 走看看