【问题标题】:ASP.NET MVC3 Displaying a Title Name from a secondary tableASP.NET MVC3 显示辅助表中的标题名称
【发布时间】:2012-01-26 13:04:38
【问题描述】:

我正在做一个关于 MVC3 的教程,首先是代码。基本上我有 3 个表格、帖子、评论和博客

    public class Blog
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string BloggerName { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
}

public class Comment
{
    public int ID { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int PostID { get; set; }
    public Post Post { get; set; }
}

public class Post
{
    public int ID { get; set; }
    public string Title { get; set; }
    public DateTime DateCreated { get; set; }
    public string Content { get; set; }
    public int BlogID { get; set; }
    public ICollection<Comment> Comments { get; set; }
}

我想在具有 BlogID 的帖子页面中显示帖子。所以目前在我的控制器中,我有以下内容:-

        public ViewResult Index()
    {
        PostViewModel model = new PostViewModel();
        model.Posts = db.Posts.ToList();

        foreach (var item in model.Posts)
        {
            model.Blog = db.Blogs.Where(b => b.ID == item.BlogID).FirstOrDefault();
        }

        return View(model);
    }

视图具有以下内容:-

@foreach (var item in Model.Posts) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Title)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.DateCreated)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Content)
    </td>
    <td>
        @Html.DisplayFor(modelItem => modelItem.Blog.Title)
    </td>
</tr>

}

我想知道的是如何从帖子中获取博客标题。我必须用什么替换它:-

            foreach (var item in model.Posts)
        {
            model.Blog = db.Blogs.Where(b => b.ID == item.BlogID).FirstOrDefault();
        }

让它工作?

感谢您的帮助和时间

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 razor linq-to-entities


    【解决方案1】:

    您可以在 Post 模型中添加对博客的引用,而不是 BlogId。

    public class Post { public int ID { get; set; } public string Title { get; set; } public DateTime DateCreated { get; set; } public string Content { get; set; } public Blog Blog { get; set; } public ICollection Comments { get; set; } }

    所以你的循环会变成:

    foreach (var item in model.Posts) { item.Blog = db.Blogs.Where(b => b.ID == item.Blog.ID).FirstOrDefault(); }

    【讨论】:

    • 您好 Bogdan,我将给出这个答案,因为它有效。不想在 Post 类中添加对 Blog 的引用,因为我已经从 Blog 类中引用了对 Post 的引用,但目前我认为它很好。
    【解决方案2】:

    将虚拟Blog 属性添加到Post 类后,您可以在视图中使用Blog.Title

    【讨论】:

    • 是的,对吗?公共虚拟博客博客{获取;放;我这样做了,现在它可以工作了
    【解决方案3】:

    我猜您只需将模型的 Blog 属性设置为其中一篇文章的博客(例如,第一篇文章,因为所有文章都属于同一个博客)

    var post = model.Posts.FirstOrDefault();
    model.Blog = post == null ? null : db.Blogs.Where(blog => blog.ID == post.BlogID);
    

    【讨论】:

    • 嗨 devdigital,帖子必须是一个列表,因为它是一个索引页面,所以我不能只获得 FirstOrDefault()。我只需要每个帖子循环时的 BlogId
    【解决方案4】:

    您可以直接将博客实体分配给帖子

       foreach (var post in model.Posts)
       {
           post.Blog = db.Blogs.FirstOrDefault(b => b.ID == item.BlogID);
       }
    

    【讨论】:

    • 嗨,archil,我仍然有这样的问题,因为我仍然只有 1 个博客,它始终是最后一个。我有一种感觉,我无法在控制器中执行该循环,但我不知道如何在视图中执行此操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多