2013-12-19 42 views
2

我對asp.net mvc技術很陌生,並且對如何呈現視圖有疑問。在我的項目中,我需要從數據庫中檢索XML文件(XML字符串)。得到這個XML字符串後,我將xml反序列化爲一個對象,比如我已經定義的LogMessage。一旦我有了這樣一個LogMessage對象,我想通過一個視圖向用戶顯示它的內容。此外,我需要處理一些LogMessage屬性,然後將其顯示給用戶。例如,(1)LogMessage對象中有一個logTime屬性,它是utc格式的,我需要將它轉換爲本地時間,(2)有一個logCode屬性,格式爲int number( 1,2,3等),我需要將每個數字轉換爲有意義的名稱,例如eventStart,eventEnd等。Asp.net mvc數據模型或視圖模型

現在我腦海中想到的是我創建了一個強類型視圖(LogMessage類型)在asp.net mvc3中,這樣我就可以用Razor渲染視圖。此外,我還在同一個視圖文件中提供了所有必要的功能(例如,將utc時間轉換爲本地時間,將代碼號映射爲其有意義的名稱等),並在渲染視圖時調用它們。

但我不知道應該按照上述方法來做還是我應該創建另一個視圖模型,比如說LogMessageViewModel(因爲我認爲LogMessage實際上是我的數據模型?)。然後,一旦獲得了LogMessage對象,我就可以創建LogMessageViewModel(並且LogMesageViewModel與LogMessage看起來非常相似),並使用LogMessage初始化LogMessageViewModel,並在Controller或Model中執行所有必需的轉換,而不是在View中執行。然後,現在我在LogMessageViewModel中爲視圖提供了所有正確的信息,並創建LogMessageViewModel的強類型視圖,並簡單地呈現視圖並向用戶顯示其內容。

任何人都可以給我一些關於這兩種不同方法的建議,或者還有其他更好的方法嗎?

回答

0

它始終是一個很好的做法,以保持數據庫層和UI層分離。

當您從數據庫獲取數據並將其存儲在DataContract(LogMessage,您的案例)中時,使用automappers將其映射到類似的viewmodel(LogMessageViewModel)。然後在視圖中使用viewModel。

流動是這樣

DB-> XML值 - 使用 AutoMapper> - - > LogMessageViewModel->查看

>的LogMessage(DataContract /域對象)
0

它總是建議使用ViewModels,如果你需要任何需要將更多信息與模型中的信息區分開來

如果需要執行任何其他處理,則可以在視圖模型中執行此操作。

然後,您可以創建一個視圖模型的強類型視圖。

Hopw這有助於..

如果不使用模型,所有的轉型邏輯,額外的數據需要發送通過視圖數據進行查看。

這使控制器變胖。

這是一個最佳做法,以儘可能保持您的控制器儘可能薄。

因爲,考慮到單一責任原則。管制員的責任只是轉移控制權。沒有任何其他別的東西

* *結論: * Recommened在方案 ***

希望這有助於使用視圖模型..