c# - 如何修复我的模型返回带有空参数的列表?
问题描述
我正在尝试创建一个简单的博客,用户可以在其中注册帐户并创建博客文章。我使用的是内置的单用户帐户系统,但已将其扩展为“ApplicationUser”,其中包含两个字段:List 和 List。我还没有实现评论,我首先致力于添加和显示帖子。
我能够成功创建帖子和用户,但是当尝试显示系统中的所有帖子时,海报字段为空。Post 类的架构是:{ID, Title, Body, Poster, TimePosted, Comments}。我在我的代码中放置了一个断点,Poster(ApplicationUser)显示为空。
我想要实现的是显示: [博客标题] by [Username] at [Date]
我遍历模型中的每个项目,它会正确打印所有内容,但以下行除外:
@Html.DisplayFor(modelItem => item.Poster.UserName)
显示一个空字符串。
我已经使用 SQL Server 对象资源管理器查看数据库中的数据,并且正确存储了用户和帖子。创建帖子的用户 ID 显示正确的 ID。说明外键设置正确。
岗位类别:
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; }
}
}
PostsController 的 Index.cshtml 视图:
@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 对象为空,并且没有一个Poster/ApplicationUser 的属性是可访问的。
PostsController 的 Index() 方法:
public async Task<IActionResult> Index()
{
return View(await _context.Post.ToListAsync());
}
我尝试通过首先将 ToListAsync() 的结果分配给“var list”,然后返回 View(list) 来分离这个逻辑。使用断点时,我发现列表变量中的 Poster 对象为空。
问题是没有将海报对象正确传递给视图。但是,我无法找到解决方案。
解决方案
您是否尝试过使用Eager LoadingInclude
?
await _context.Post.Include(p => p.Poster).ToListAsync();
推荐阅读
- powershell - PowerShell - 从子数组中的列中选择单个值
- android - android在膨胀布局时崩溃
- javascript - E4x xml 空标签删除
- javascript - 用three.js随机改变点的颜色
- pandas - 如果另一列的值以特定字符串结尾,则更改列值
- c++ - LLVM 生成效率低下的 IR
- windows - 如何使用 Wifi Direct 将我的 Windows 10 PC 连接到我的 Raspberry Pi 3?
- windows - PowerWriteACValueIndex 更改已应用但未使用
- java - 如何在 SMB 中定义路径
- azure - Azure Maps Search API 的响应语言并不总是英语