2012-12-24 131 views
3

首先我想與大家分享這個約視圖模型很有趣的文章: http://rachelappel.com/use-viewmodels-to-manage-data-amp-organize-code-in-asp.net-mvc-applicationsASP.NET MVC視圖模型良好做法

我有一個問題
它是一個很好的做法,所有的視圖模型類從基類派生例如:BaseViewModel,因爲大多數網站/ Web應用程序都有相同的信息來顯示,通常在主頁面中? 在工作正常的ASP.NET MVC中,佈局(母版頁)模型是BaseViewModel,每個視圖都有不同的ViewModel。

使用ViewModel接口的任何示例也是受歡迎的。

謝謝。 Riadh

回答

5

它是一個很好的做法,所有的視圖模型類從基類

推導雖然這可能在某些情況下真實的,它是不是可能被推廣到所有的ASP.NET MVC應用程序。在所有ASP.NET MVC視圖中還有其他顯示公共信息的方式,例如使用child actions

子操作完全獨立於主操作,即使它們在相同的HTTP請求中執行並且聚合結果,它們也可以具有完全獨立的視圖模型,僅包含此佈局的特定部分所需的信息。他們可以獨立地查詢數據提供者以獲取域模型並將其映射到相應的視圖模型。所有這些都可以完全獨立於主要操作和視圖模型。因此,您的主視圖模型不需要從共同的基本視圖模型派生。

因此,您無法真正概括使用通用基本視圖模型是否是最佳實踐。對您的問題的簡單回答是:它取決於您正在開發的應用程序的具體情況。

+0

感謝您快速回答,我一如既往地認同您,沒有一個適用於所有項目的良好做法。 子動作是一個很好的選擇,但假設我想在控制器(或服務)中獲取從子動作中檢索的信息? 例如用戶信息。 我必須複製代碼或在服務中調用兩次以檢索我需要的信息,並根據此信息更新視圖,並在一次顯示用戶信息的子操作中更新視圖。 IViewModel模式中的任何示例?如何使用它來顯示不同的意見和DI? –

+0

您隨UserInfos提供的示例應該由您的成員資格提供者管理。如果您想要訪問控制器中的用戶信息,只需查詢您的成員資格提供者即可爲當前經過身份驗證的用戶提供此信息。至於你關於IViewModel模式的第二個問題,我不確定也不明白你在問什麼。就不同的視圖而言,您可以使用自定義的編輯器/顯示模板,基於您的視圖模型的確切類型將自動呈現相應的模板。 –

+0

基本控制器類是替換User屬性(使用new關鍵字)來返回自定義IPrincipal的最佳位置。然後控制器可以用任何所需的用戶數據填充視圖模型。您也可以在基本頁面中對視圖執行此操作。 –