0

我是初学者 ASP.net,我想在帖子中显示所有评论。PostController 中的 Detail() 方法只显示帖子内容,我不知道如何处理 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; }
}

这是后控制器

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

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

3 回答 3

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);
     }
}
于 2013-03-25T05:03:17.027 回答
0

所以首先你应该有一个从帖子到评论的导航属性。像这样的东西:

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)

于 2013-03-25T04:59:20.647 回答
0

您也可以使用 ViewData 将评论放到 View 中。

例如:操作:ViewData["Comments"] = repository.Comments.Where(c=> c.PostID = id).ToList();

查看: var comments =ViewData["Comments"] as List; ...您可以使用 var-comments

于 2013-03-25T05:38:07.787 回答