如何修复我的模型返回带有空参数的列表?

时间:2018-12-24 04:37:09

标签: c# asp.net-mvc entity-framework

我正在尝试创建一个简单的博客,用户可以在其中注册帐户并创建博客文章。我正在使用内置的单用户帐户系统,但已将其扩展为“ ApplicationUser”,其中包含两个字段:列表和列表。我尚未实施评论,因此我首先致力于添加和显示帖子。

我能够成功创建帖子和用户,但是当尝试显示系统中的所有帖子时,Poster字段为空。 Post类的架构为:{ID,标题,正文,海报,TimePosted,注释}。我在代码中放置了一个断点,Poster(ApplicationUser)显示为空。

我想要实现的是显示: [日期]的[用户名]的[博客标题]

我遍历模型中的每个项目,并正确打印所有内容,除了以下行:

@ 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对象为null,并且不能访问Poster / ApplicationUser的单个属性。

PostsController的Index()方法:

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

我尝试通过首先将ToListAsync()的结果分配给“ var list”,然后返回View(list)来分离此逻辑。使用断点时,我发现list变量内的Poster对象为null。

问题是Poster对象未正确传递到视图。但是,我找不到解决方法。

1 个答案:

答案 0 :(得分:2)

您使用Include尝试过Eager Loading吗?

await _context.Post.Include(p => p.Poster).ToListAsync();