我在尝试将两个模型与视图结合使用时遇到了麻烦。我创建了一个合并的模型对象:
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帮助程序控件的数据,对吧?
我不确定我是否正确这样做,因为当我提交表单时,传递回控制器的模型对象不包含任何数据。我在视图中执行正确的陈述吗?
感谢。
答案 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
和其他数据。希望这会有所帮助。