ASP.NET MVC: передача для просмотра вложенных объектов - PullRequest
0 голосов
/ 12 октября 2019

У меня есть следующая модель:

public class Business
{
    [Key]
    public int BusinessId { get; set; }
    public string Name {get;set;}
    ....
    .....
    ....
    [Display(Name = "Owner")]
    public int OwnerId { get; set; }
    [ForeignKey("OwnerId")]
    public ApplicationUser Owner { get; set; }
}

В моем контроллере у меня есть следующая функция:

public async Task<IActionResult> Index()
{
    return View(await _context.Business.ToListAsync());
}

и мой взгляд:

@model IEnumerable<ServiceProviderApp.Models.Business>
@{
    ViewData["Title"] = "Business Engine";
}
.....
......
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
              ......
            <td>
                @Html.DisplayFor(modelItem => item.Owner.Name)
            </td>
            <td>

КакВы можете понять, что Владелец внутри Бизнеса - это Объект. Поэтому, когда я пытаюсь получить доступ к нему в представлении (item.Owner.Name), я ничего не получаю (null). Я могу изменить запрос на контроллере, чтобы он возвращал присоединенную запись, но тогда модель в представлении больше не будет бизнесом.

Я искал в Интернете, но не нашел хорошего и ясного объяснения. Не уверен, почему EF не связывает вложенные объекты автоматически.

Один вариант, который я видел на Youtube, но я думаю, что это отстой:

  1. Создать новую модель свсе столбцы после объединения
  2. В моем контроллере запустите объединение и передайте его представлению
  3. В представлении примите новую модель в качестве параметра

Ссылка- https://www.youtube.com/watch?v=v1B3R-kb9CU

Спасибо.

1 Ответ

1 голос
/ 12 октября 2019

Решение: Вам нужно использовать функцию include в контроллере:

public async Task<IActionResult> Index()
    {
        var business = _context.Business.Include("Owner");
        return View(await business.ToListAsync());
    }

Спасибо DanielShabi за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...