首页 > 解决方案 > Dot Net Core MVC:如何从视图中进行查询?

问题描述

我有一个表,每条记录都有一个 ParentId。我需要从我的索引视图中进行查询以显示父记录的名称而不是其 ID。但我不知道如何从视图中使用 _context 或如何处理这种情况。目前我只能看到模型本身中的父 ID。

@foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CollectionName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ParentId) // I need this to be _context.Groups.FirstOrDefault(m=>m.id == item.ParentId)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CollectionHead)
            </td>
            <td>
                <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
            </td>
        </tr>
    }

标签: .netasp.net-mvc.net-core

解决方案


您不应该将一个Context或任何数据库逻辑传递给视图。

您的 ViewModel 应该包含您需要显示的所有必要数据。看起来在您的 ViewModel 中您正在通过 a ParentId,但这在 View 中确实需要。因此,您可以将其更改为实际Parent模型或将另一个字段添加到名为ParentName. 然后你就可以在视图中做这样的事情,这取决于你去的建议:

@Html.DisplayFor(modelItem => item.Parent.Name) 

或者

@Html.DisplayFor(modelItem => item.ParentName) 

如果不查看您的 Controller 代码,很难帮助您像这样填充 ViewModel。但是,如果您的 LINQ 是正确的,那么您可以这样做:

viewModel.Parent = _context.Groups.FirstOrDefault(m=>m.id == item.ParentId);

或者

viewModel.ParentName = _context.Groups.FirstOrDefault(m=>m.id == item.ParentId).Name;

推荐阅读