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

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

  • 相关阅读:
    java 接口的定义即实现
    进程的pv。。
    变量,常量,字符,字符串,数组的声明及初始化
    运算符重载
    数组大小的声明 1到100的素数
    第十二周助教总结(2021.4.192021.4.25)
    第十周助教总结(2021.4.52021.4.11)
    第十一周助教总结(2021.4.122021.4.18)
    助教周报(第一轮)王冰炜
    ThinkPHP3.1.2整合UCenter详解(一)
  • 原文地址:https://www.cnblogs.com/rangeon/p/3900816.html
Copyright © 2011-2022 走看看