将多个模型从控制器发送到单个视图以获取不同形式的 MVC

Send multiple model from controller to single view for different form MVC

请考虑我有 2 个表格将放在单一视图中,分别是学生表格和教师表格。每个都有不同的形式动作。我需要一次从控制器传递这两个模型。所以我决定把 2 变成一个新模型 class:

Public Class StudentTeacher
    Public Student As ClsStudent
    Public Teacher As ClsTeacher
End Class

并从控制器发送模型:

Return View(New StudentTeacher With {.Student = New ClsStudent, .Teacher = New ClsTeacher })

在视图中我有 2 个局部视图,一个用于学生形式,一个用于教师形式。对于学生表格将是这样的:

@ModelType Model.StudentTeacher
@Using Html.Beginform()
     ....
     @Html.TextBoxFor(Function(m) m.Student.name)
     ....
End Using

这个视图很好用,唯一的问题是每个元素的 id 将包含模型名称,因此学生姓名的输入将是:

<input id="student.name">

因此,当提交表单时,控制器将接收它作为 'StudentTeacher' 的模型而不是 'Student'。我想要的这个学生表格只是发送学生模型。教师可以在同一视图中以不同的形式发送。有什么建议可以解决这个问题吗?非常感谢...!

我可以建议两种方法来解决问题:

1) 您可以通过组合其中的两个模型来使用 ViewModel。然后return这个ViewModel从Controller到View。更改 View 上的数据后,return 再次将此 ViewModel 发送到 Controller。如果你想对这些数据进行不同的操作,你可以在控制器中进行,而不是从视图中调用不同的方法。

2) 和你一样,你可以使用局部视图,然后将每个模型发送到主视图中的相关局部视图。但是,当您提交表单时,您应该一次将表单参数作为两个参数(模型 I 和模型 II)传递。然后在控制器中获取表单数据(控制器也接受这两个参数:模型 I 和模型 II)。

希望这对您有所帮助...