在MVC4中使用具有1个视图的多个模型

时间:2013-01-26 23:12:55

标签: asp.net .net vb.net

我在尝试将两个模型与视图结合使用时遇到了麻烦。我创建了一个合并的模型对象:

Public Class BusinessFormModel
    Public Property busModel As Business
    Public Property busMetaModel As BusinessMeta

    Public Sub New()
         busModel = New Business
         busMetaModel  = New BusinessMeta
    End Sub

End Class

对于我的观点,我有一个表格,如:

@ModelType business.BusinessFormModel

@Html.TextBox("business_category", Model.busModel.business_category)
..
@Html.TextBox("business_name", Model.busMetaModel.business_name)
..
@Html.TextBox("business_description", Model.busMetaModel.business_description)

我的控制器看起来像这样:

Function ShowForm() As ActionResult
     Dim model As new BusinessFormModel
     model.busModel.PopulateFromId(2)
     model.busMetaModel.PopulateFromId(2)

     Return View(model)
End Function

Function Submit(ByVal model As BusinessFormModel) As String
     model.busModel.UpdateCategory()
     ...
     model.busMetaModel.UpdateBusinessDescription()
     Return "Submitted"
End Function

基本上,ShowForm将使用基于id的数据库中的值填充对象。 id也是此模型中的属性。然后当表单提交时,我有基于id更新特定字段的功能。但是,似乎在调用Submit()时,传递的对象包含Nothing个值。我至少应该获取绑定到HTML帮助程序控件的数据,对吧?

我不确定我是否正确这样做,因为当我提交表单时,传递回控制器的模型对象不包含任何数据。我在视图中执行正确的陈述吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您需要查看ViewModel,这样您就可以在一个视图中拥有多个模型和其他业务逻辑。 ViewModel example exercise

以此为例。除了ViewModel之外,您还会有一个单独的Controller课程,可以将您的模型展示给您的观点。

<强>视图模型

Public Class StoreIndexViewModel
    Public Property NumberOfGenres As Integer
    Public Property Genres As List(Of String) 

    Public Property AnotherComplexModel As ComplexModel
End Class

<强>控制器

Public Function Index() As ActionResult
    'Create list of genres
    Dim genres = New List(Of String) From {"Rock", "Jazz", "Country", "Pop", "Disco"}
    'Create your view model
    Dim viewModel = New StoreIndexViewModel With {.NumberOfGenres = genres.Count, .Genres = genres}
    Return View(viewModel) 
End Function

View中,您仍然可以使用相同的方式引用Model对象,但它现在包含现在可以使用的所有Models和其他数据。希望这会有所帮助。