1

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

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 助手控件的数据,对吧?

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

谢谢。

4

1 回答 1

1

您需要研究ViewModel哪些允许您在单个视图中拥有多个模型和其他业务逻辑。ViewModel 示例练习

举个例子。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现在可以使用的所有数据和其他数据。希望这可以帮助。

于 2013-01-26T23:23:12.020 回答