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变量中存储的是匿名对象,只能通过反射取值了。

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

  • 相关阅读:
    迭代器
    闭包函数与装饰器
    pyhton的函数
    文件处理
    Python2和Python3编码的区别
    hdu5080:几何+polya计数(鞍山区域赛K题)
    hdu1695:数论+容斥
    HDU3564 --- Another LIS (线段树维护最值问题)
    hdu1521:排列组合---指数型母函数
    poj1014:母函数+优化
  • 原文地址:https://www.cnblogs.com/rangeon/p/3900816.html
Copyright © 2011-2022 走看看