2011-04-10 189 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