如何将一种类型的局部视图放入另一种类型的常规视图中?

时间:2012-07-06 07:23:40

标签: asp.net-mvc-3

我正在尝试将局部视图放在不同类型的常规视图中。我从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>

如何将一种类型的局部视图放入另一种类型的常规视图中? 谢谢你的帮助。

1 个答案:

答案 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显示模板,这样您就不必在视图中编写任何丑陋的循环。