Как исправить мою модель, возвращающую список с нулевым параметром? - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь создать простой блог, где пользователь может зарегистрировать учетную запись и создавать сообщения в блоге.Я использую встроенную систему учетных записей для одного пользователя, но расширил ее до «ApplicationUser», который содержит два поля: List и List.Мне еще предстоит реализовать комментарии, и я сначала работаю над добавлением и отображением сообщений.

Я могу успешно создавать сообщения и пользователей, но при попытке отобразить все сообщения в системе поле "Постер"ноль.Схема для класса Post: {ID, Заголовок, Тело, Плакат, Время размещения, Комментарии}.Я ставлю точку останова в своем коде, и Poster (ApplicationUser) отображается как ноль.

Я пытаюсь добиться того, чтобы отобразить: [Название блога] [Имя пользователя] в [Дата]

Я перебираю каждый элемент в модели, и он печатает все правильно, кроме строки:

@Html.DisplayFor (modelItem => item.Poster.UserName)

, которая отображаетпустая строка.

Я использовал обозреватель объектов SQL Server для просмотра данных в базе данных, и пользователи и сообщения хранятся правильно.Идентификатор пользователя, который создает сообщение, отображает правильный идентификатор.Он показывает, что внешний ключ настроен правильно.

Post Class:

namespace BlogApp.Models
{
    public class Post
    {

        [Required, Key]
        public int ID { get; set; }

        [Required]
        public string Title { get; set; }

        [Required]
        public string Body { get; set; }

        [Required]
        public virtual ApplicationUser Poster { get; set; }

        [Required]
        public DateTime TimePosted { get; set; }

        [Required]
        public List<Comment> Comments { get; set; }

    }
}

Index.cshtml представление для PostsController:

@foreach (var item in Model.Reverse())
{
    <div class="post">
        <a asp-action="Details" asp-route-id="@item.ID">
            <h3>"@Html.DisplayFor(modelItem => item.Title)", by 
@Html.DisplayFor(modelItem => item.Poster.UserName) on 
@Html.DisplayFor(modelItem => item.TimePosted)</h3>
        </a>
        <p>@Html.DisplayFor(modelItem => item.Body)</p>
    </div>
}

В этом примере всеотображается правильно, кроме item.Poster.UserName.Весь объект Poster имеет значение null, и ни один атрибут Poster / ApplicationUser не доступен.

Метод Index () для PostsController:

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

Я попытался отделить эту логику первымприсваивание результата ToListAsync () «списку переменных», а затем возвращение View (список).При использовании точки останова я обнаружил, что объект Poster в переменной списка имеет значение null.

Проблема в том, что объект Poster неправильно передан в представление.Однако я не могу найти решение.

1 Ответ

0 голосов
/ 24 декабря 2018

Вы пробовали Готов загружать , используя Include?

await _context.Post.Include(p => p.Poster).ToListAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...