2011-04-10 272 views
1

我正在研究模型層次結構並提出幾個問題。ASP.NET MVC查看模型庫?

1)我有每種視圖類型(添加,編輯和視圖)的基本模型。我把這些東西放在特定於每種視圖類型的東西中。

2)然後我有一個模型基地,上面的基地繼承。這允許我包含與ALL視圖有關的事物。

3)在我的ModelBase中,我有一些其他視圖模型,如FeedbackViewModel,ShoppingCartViewModel等,我可以在任何視圖上使用它們。

4)我有我的MasterPage繼承ModelBase。

Public MustInherit Class ModelBase 
    Public Property ErrorMessage As String 
    Public Property InformationMessage As String 
    Public Property WarningMessage As String 
    Public Property FeedbackModel As New FeedbackViewModel 

End Class 

Public MustInherit Class ViewModelBase 
    Inherits ModelBase 

    'View Model Specific Stuff 
End Class 

'Allows contact us form to be submitted. 
Public Class ContactUsViewModel 
    Inherits ViewModelBase 

    Public Property Name As String 
    Public Property EmailAddress As String 
    Public Property Phone As String 
    Public Property Comments As String 

End Class 

這是我的模型的基本結構,但有幾個問題:

1)我該怎麼做,不需要模型的視圖,但我需要傳遞FeedabckViewModel,SHoppingCartViewModel等?我正在考慮GenricViewModel?

2)您是否發現此設計中存在任何缺陷?

謝謝!

回答

2

幾點:

  • 爲什麼要用ErrorMessageInformationalMessageWarningMessageModelState應該是綽綽有餘,而且它與驗證輔助改善關係,而不是你寫的手動拼接的視圖。

  • 我認爲處理不同視圖類型的「基礎」模型有點矯枉過正。我認爲enum指定的模式會更好,那麼你可以做出相應的決定。

  • 總的來說,沒有什麼是真的錯誤與您的設計。這是一個意見問題 - 我通常爲每個視圖創建一個ViewModel。保持簡單。我廣泛使用區域,所以它不會混亂。我通常嘗試並創建ViewModel以使視圖變得簡單 - 這是最終目標,不是在View中重複使用代碼,而是保持視圖簡單。如使用嵌套模型擴充模型以利用partials/templates,而不是使用一堆字符串。

1)我該怎麼做,不需要模型的視圖,但我需要通過FeedabckViewModel,SHoppingCartViewModel等?

這種矛盾本身不矛盾嗎? :)如果您只需要幾個ViewModel的「部分」,則可以創建另一個ViewModel,或者只需要幾個字段,只需將其粘貼到ViewData中即可。

+0

爲什麼使用'ErrorMessage','InformationMessage'等?我這樣做是爲了隱藏我想在視圖(頁面)上顯示的消息,該消息未綁定到某個屬性,比如'Invalid Login.'。在控制器中,我使用ModelState.AddModelError(「Message」,「Invalid Login」),然後爲視圖中的Message屬性設置ValidationMessage。 – Sam 2011-04-11 00:12:46

+0

因此,有一個枚舉'ModelType',然後在每個模型中有一個屬性'ModelType'?你是說嵌套模型好嗎?我喜歡他們,那麼你有一個強類型的模型層次結構。 – Sam 2011-04-11 00:14:16

+1

如果您想要使用基於約定的模板,例如自定義顯示/編輯模板--Html.DisplayFor(model => model.NestedViewModelType),則嵌套ViewModel非常好。 – RPM1984 2011-04-11 00:16:46