ASP.NET MVC3显示辅助表中的标题名称

本文关键字:标题 NET MVC3 显示 ASP | 更新日期: 2023-09-27 18:21:24

我正在做一个关于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();
        }

让它工作?

感谢您的帮助和时间

ASP.NET MVC3显示辅助表中的标题名称

您可以在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();
}

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

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

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

您可以直接指定博客实体发布

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