Я пытаюсь создать простой блог, где пользователь может зарегистрировать учетную запись и создавать сообщения в блоге.Я использую встроенную систему учетных записей для одного пользователя, но расширил ее до «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 неправильно передан в представление.Однако я не могу найти решение.