Dot Net Core MVC: как сделать запрос из представления? - PullRequest
1 голос
/ 21 октября 2019

У меня есть таблица с каждой записью, имеющей ParentId. Мне нужно сделать запрос из моего представления индекса, чтобы показать имя родительской записи вместо ее идентификатора. Но я не знаю, как использовать _context из вида или как справиться с ситуацией. В настоящее время я могу видеть только Parent 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>
    }

1 Ответ

3 голосов
/ 21 октября 2019

Вы не должны передавать Context или какую-либо логику базы данных в представления.

Ваша ViewModel должна содержать все необходимые данные, которые вы должны отобразить. Похоже, что в вашей ViewModel вы проходите через ParentId, но это действительно необходимо в View. Таким образом, вы можете изменить это на фактическую модель Parent или добавить другое поле во ViewModel с именем ParentName. Тогда вы сможете сделать что-то подобное в представлении, в зависимости от того, какое предложение вы выберете:

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

или

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

Не глядя на ваш код контроллера, это довольнотрудно помочь о том, как заполнить ViewModel, как это. Но если ваш LINQ правильный, то вы можете сделать это:

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

или

viewModel.ParentName = _context.Groups.FirstOrDefault(m=>m.id == item.ParentId).Name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...