ASP.NET MVC ViewData/ViewBag 簡單小結

來源:互聯網
上載者:User

標籤:使用   io   strong   ar   問題   cti   .net   對象   

近期在項目中遇到一個問題,就是用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是使用dynamicObject Storage Service的值,所以進一步引申了一下對dynamic的小結:
1、如果dynamic變數中儲存的是普通對象,則可以使用普通的“變數名.對象屬性名稱”方式取屬性值;
2、如果dynamic變數中儲存的是Dictionary,則可以使用“變數名[Key]”的方式取Value;
3、如果dynamic變數中儲存的是已知類型的對象,可以像操作相應類型對象的方式進行操作;
4、如果dynamic變數中儲存的是匿名對象,只能通過反射取值了。

以上觀點只代表本人的膚淺認識,歡迎大牛們拍磚。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.