ASP。 NET MVC3 - 如何在Post中显示所有评论

时间:2013-03-25 04:54:07

标签: asp.net asp.net-mvc-3 linq

我是初学ASP.net,我想在帖子中显示所有评论。 PostController中的Detail()方法只显示帖子内容,我不知道如何处理在帖子中显示commnent的Detail()方法。

希望有人可以帮助我,非常感谢。

我有两个型号

public class Post
{
    public int PostID { get; set; }
    public string Title{ get; set; }
    public string Content{ get; set; }

}
public class Comment
{
    public int CommentID { get; set; }
    public int PostID { get; set; }
    public string Content { get; set; }
}

这是Post Controller

public class PostController : Controller
{
   //////
     public ViewResult Detail(int id )
     {
        Post viewpost= (repository.Posts.Single(p => p.PostID == id));

        return View(viewpost);
     }
    ////////////////
}

3 个答案:

答案 0 :(得分:1)

道德有一个很好的答案。如果您不想更改Post模型以使其注释具有导航属性,如果您无法控制或某些内容,那么您将不得不制作类似ViewPostModel的内容

public class ViewPostModel
{
    public Post Post { get; set; }
    public List<Comment> Comments { get; set; }
}

然后,您必须在两个列表中查询您的存储库:

public class PostController : Controller
{
     public ViewResult Detail(int id )
     {
        ViewPostModel viewpost = new ViewPostModel();
        viewPost.Post = repository.Posts.Single(p => p.PostID == id);
        viewPost.Comments = repository.Comments.Where(c=> c.PostID = id).ToList();
        return View(viewpost);
     }
}

答案 1 :(得分:0)

首先,你应该从post到它的评论有一个导航属性。 像这样的东西:

public class Post
{
    public int PostID { get; set; }
    public string Title{ get; set; }
    public string Content{ get; set; }

    public virtual IEnummrable<Comment> Comments {get; set;}
}

请注意,如果您使用DB-First来执行此操作,则应编辑EDMX

然后只需从存储库中获取注释:

public ViewResult Detail(int id )
{
   Post viewpost= (repository.Posts.Include("Comments").Single(p => p.PostID == id));
   return View(viewpost);
}

在您的视图中,迭代您的评论并将其显示为

@foreach (var comment in Model.Comments)
{
    @comment.Content
}

修改 以上所有内容仅在使用EF \ Linq-2-SQL时才有意义(感谢@tostringtheory)

答案 2 :(得分:0)

您也可以使用ViewData将注释放入View。

例如: 行动: ViewData [“Comments”] = repository.Comments.Where(c =&gt; c.PostID = id).ToList();

查看: var comments = ViewData [“Comments”]作为List; ......你可以使用var-comments