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

时间:2013-09-20 20:56:24

标签: c# asp.net-mvc asp.net-mvc-4

我有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>

2 个答案:

答案 0 :(得分:1)

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

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

或者您可以绕过控制器并使用this overload of 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>

答案 1 :(得分:0)

我通过创建一个包含liste和Id的somethingViewModel来解决这个问题。这样我可以在视图中访问的一个新对象中包含来自两个不同位置的两个信息。