在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图
生活随笔
收集整理的這篇文章主要介紹了
在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在ASP.NET MVC 模型中 選擇最好的方法將多個model(數據模型)傳遞到視圖
前提介紹
這個文章我們要討論,在ASP.NET MVC模型的項目中,怎么選擇一個最有效的方式來將多個數據模型(models)傳遞到視圖(view)中。我們已經在之前的文章“在一個視圖中使用多個模型”中,介紹了下面六個方式,“ViewModel,Partial View, Tuple, ViewData, ViewBag 和TempData”. 我們在特定的情境中進行選擇哪一種方法時,可能會有疑惑。在這篇文章中,我會分享一下我在這個問題上的發現。 如果你還沒有讀過之前的文章“在一個視圖中使用多個模型”,請先查看,因為這篇文章是建立之前那篇的基礎之上的。之前的文章中有詳細的討論我們應該如何將多個數據模型(models)傳遞到視圖,并且有ASP.NET MVC4應用的演示例子. 它會幫助你理解以下文章的內容。?
方法的總體介紹
所有的在前一篇文章中介紹的六種方法都有各自的優點和不足。需要根據當在某個特定的情景中來選擇,而且這明顯也是一個爭論的話題。在做任何決定之前,我們需要將需求完全辨認清楚,然后,我們就只需要對比這些方法的優缺點來進行選擇。這篇文章中,我會整理這些方法從最常用的在ASP.NET MVC應用中的到最不常用的: 1,ViewModel 2,Partial View 3,ViewBag 4,ViewData 5,TempData 6,Tuple 注意:一個應用中可能會選擇用到多種方法,這是根據應用在某一個特定環境的需求的之上的。我們需要考慮每一個當前壞境中最合適的方法。 接下來,我們詳細討論這些方法,包括他們的使用和有關的優缺點。 ViewModel ViewModel 是一個允許我們在企業級應用程序中將多個models傳遞到視圖的一個模式。它能為每一個視圖的需要,將多個models(數據模型)集合起來或者將models的各種屬性準確包含在內。ViewModel 不應該有方法函數。它是一個某個視圖所需要的屬性的集合。 ? 典型使用: ViewModel是在企業級程序應用中,最廣泛使用的用來將多個model傳遞到視圖的方法。這是一個當你需要在視圖中打印或使用多個數據模型的屬性時可以使用的標準的方式(也適用在Partial View中)。 優點:- ViewModel 允許我們將多個類型的數據模型(models)當成一個類型數據模型來加載一個視圖。
- 很棒的智能支持和編譯階段的在視圖頁面的錯誤檢測功能。
- 使用ViewModel的話,視圖只能獲得它所需要的數據,這也對安全問題有好處。核心的數據模型不會暴露給用戶。
- 如果在核心的數據模型中有什么改變,你不需要在視圖的代碼中再修改,你只需要修改系那個管的ViewModel。
- 用這個方式,ViewModel 促進了應用中的松耦合。
- 提高了視圖代碼在程序中的重用性。
- 對于單一頁面(Single Page Application)應用非常有用。
- 你也可以在Partial View中使用ViewModel。
- 使用Partial View,你能夠使用AJAX來更新一部分頁面而不刷新整個頁面。
- 如果使用很多的話,視圖變成了一個很多Partial View的集合,所以有時候可讀性會差一點。
- 使用ViewBag, 我們可以很省事的把數據從控制器發送到視圖。
- ViewBag的語法比ViewData好用,不需要使用鍵值Key。
- ViewBag 不需要做數據類型的類型轉換。
- 它只用于單方向的傳遞數據,即從控制器到視圖。
- ViewBag的值只能在當前的請求中有效,它的值不能在多個請求之間之久,意味著如果有Redirection(重導),ViewBag的值變成空。
- 過度使用ViewBag當然是一個不好的做法。不推薦使用在企業級的應用程序中,盡管有時候它被用在傳遞少量的數據。
- 沒有智能支持和編譯階段檢測錯誤的功能。
- 使用ViewData我們能使用內置的屬性伴隨著鍵值Key,把數據從控制器傳遞到視圖中。
- 只是應用于單方向的數據傳遞,也就是從控制器到視圖。
- ViewData的值只能在當前的請求中有效,它的值不能在多個請求之間之久,意味著如果有Redirection(重導),ViewData的值變成空。
- 過度使用ViewData當然是一個不好的做法。不推薦使用在企業級的應用程序中,盡管有時候它被用在傳遞少量的數據。
- 語法要使用鍵值Key,使得它不如ViewBag的可讀性,ViewBag使用屬性類型的語法。
- 沒有智能支持和編譯階段檢測錯誤的功能。
- 你可以從一個控制器傳遞數據到另一個控制器或者從一個Action傳遞到另一個Action。
- 可能會如上面討論的那樣,引起一些安全隱患。
- 它需要進行類型轉換和檢測Null值來避免錯誤。
- Visual Studio中沒有智能支持。
- 它提供了一個可以整合多個類型的而不需要新創建類的方式(ViewModel)。
- 它是一個對ViewModel的快速補救措施,而且需要更少的代碼編寫。
- Tuple 是大小固定的最多8個項目。
- 值被以item1, item2...形式記錄,很難識從代碼中識別變量。
- Visual Studio中沒有很棒的智能支持。
總結
以上是生活随笔為你收集整理的在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【开源推荐】进阶实战,从一款音乐播放器开
- 下一篇: easyui 删除指定行