如何在 MVC 4 中将一个模型的列表显示到另一个视图 ASP.NET

本文关键字:列表显示 模型 一个 另一个 NET ASP 视图 MVC | 更新日期: 2023-09-27 18:32:15

我有一个Topic的列表。每个Topic都有一个Message列表。当我单击"详细信息"时,我想打开一个新视图,该视图显示主题中Message的列表。

我希望我需要修改这一行:(这是我到目前为止所拥有的)

@Html.ActionLink("Details", "Details", new { id=item.Id }, null)

Message 的访问由item.Message 访问。

以及详细信息视图中的第一行

@model IEnumerable<Models.TopicMessage>

<小时 />这是我的主题视图:

@model IEnumerable<Models.Topic>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th></th>
    </tr>
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.ActionLink("Details", "Details", new { id=item.Id }, null)
        </td>
    </tr>
}
</table>

如何在 MVC 4 中将一个模型的列表显示到另一个视图 ASP.NET

有很多方法可以做到这一点。您可以使用 Action 方法直接执行控制器操作:

<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Name)
    </td>
    <td>
        @Html.Action("Details", "Details", new { id=item.Id })
    </td>
</tr>

或者你可以绕过控制器,直接使用这个重载DisplayFor渲染视图:

<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Messages, "MessagesDetail")
    </td>
</tr>

或者,如果将模板定义为默认DisplayTemplate,则可以执行以下操作:

<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Messages)
    </td>
</tr>

我通过制作一个同时包含列表和 ID 的somethingViewModel来解决此问题。这样,我可以将来自两个不同位置的两个信息包含在我在视图中可以访问的一个新对象中。