我正在尝试将局部视图放在不同类型的常规视图中。我从Assignment模型创建局部视图并将其放在/ Views / Shared文件夹中。然后我尝试在基于另一个模型(InstructorIndexData)的常规视图中调用局部视图并得到错误消息:
传递到字典中的模型项的类型为“SchoolIn.ViewModels.InstructorIndexData”,但此字典需要“SchoolIn.Models.Assignment”类型的模型项。
以下是部分视图中的一些代码:
@model ...Models.Assignment
<div class="display-label">Grade</div>
<div class="display-field">
@Html.DisplayFor(model => model.Grade)
</div>
以下是常规视图中的一些代码:
@model SchoolIn.ViewModels.InstructorIndexData
<td> @Html.Partial("_UpdateAttendance")</td>
如何将一种类型的局部视图放入另一种类型的常规视图中? 谢谢你的帮助。
答案 0 :(得分:1)
如果使用Html.Partial
方法渲染视图,则可以将模型作为第二个参数传递:
@Html.Partial("_PartialName", item.Grade)
如果您使用的是显示/编辑器模板,则会自动完成:
@Html.DisplayFor(x => x.Grade)
现在假设成绩属性属于Assignment
类型,则会呈现~/Views/Shared/DislpayTemplates/Assignment.cshtml
。
如果另一方面,你有一个收集属性:
public IEnumerable<Assignment> Grades { get; set; }
然后你可以使用:
@model SchoolIn.ViewModels.InstructorIndexData
<table>
<tr>
@Html.DisplayFor(x => x.Grades)
</tr>
</table>
现在将为Grades集合的每个元素自动呈现Assignment.cshtml
显示模板,这样您就不必在视图中编写任何丑陋的循环。