post下的评论如何显示

how to display the comments under the post

我的项目有问题我是 MVC 的新手所以请帮助我。我在相关 Post 下显示评论时遇到问题,就像我们在 facebook 中有 post 并且我们在 post 下评论并显示,我已经显示并列出了所有 posts 在这下面我已经显示了评论字段,我只是想知道相关评论如何显示, 查看

    @foreach (Post item in Model.posts)
{
    foreach(Comment c in item.comments)
    {
<div>

    <p>
        @item.Body
    </p>
    <p>@item.timeDate</p>
    <p>@c.Body</p>

</div>   
    using (Html.BeginForm("CreateComment", "Posts", FormMethod.Post))
    {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Comment</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.comment.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.comment.Name)
            @Html.ValidationMessageFor(model => model.comment.Name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.comment.Email)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.comment.Email)
            @Html.ValidationMessageFor(model => model.comment.Email)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.comment.Body)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.comment.Body)
            @Html.ValidationMessageFor(model => model.comment.Body)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.comment.dateTime)
        </div>
        <div class="editor-field">
           @Html.TextBoxFor(model => model.comment.dateTime, new { id = "datepicker", @Value = @DateTime.Now })
           @Html.ValidationMessageFor(model => model.post.timeDate)
        </div>       
        <div class="editor-field">
           <input type ="text" hidden="hidden" value="@item.Id" name="txtpostId"/>
            @Html.ValidationMessageFor(model => model.comment.PostId)
        </div>

        <p>
            <input type="submit" value="Create"/>
        </p>
    </fieldset>
    }
  }
}

控制器

 public ActionResult Index()
    {
        objVmPost.comment = new Comment();
        objVmPost.post = new Post();
        List<Post> mylist = db.Posts.Include(post => post.Comments).ToList();
        objVmPost.posts = mylist;
        return View("Index",objVmPost);
    }
 [HttpPost]
    public ActionResult CreateComment(VmPost objVmpost)
    {
        objVmpost.comment.PostId = Convert.ToInt32(Request.Form["txtpostId"]);
        db.Comments.Add(objVmpost.comment);
        db.SaveChanges();
        List<Post> mylist = objPostDb.GetAll().ToList();
        objVmpost.posts = mylist;
        return View("index", objVmpost);
    }

型号

public partial class Comment
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string Body { get; set; }
    public System.DateTime dateTime { get; set; }
    public int PostId { get; set; }

    public virtual Post Post { get; set; }
}

public partial class Post
    {
        public Post()
        {
            this.Comments = new HashSet<Comment>();
            this.Tags = new HashSet<Tag>();
        }

        public int Id { get; set; }
        public System.DateTime timeDate { get; set; }
        public string Body { get; set; }

        public virtual ICollection<Comment> Comments { get; set; }
        public virtual ICollection<Tag> Tags { get; set; }
    }

This is the problem click here

在你的控制器中你正在这样做

List<Comment> cmntlist = db.Comments.ToList();

转化为SQL

SELECT * FROM `comments`

因此,您不是在检索相关评论,而是在检索存储在数据库中的所有评论。

你可以使用延迟加载机制,你的控制器看起来像这样

public ActionResult Index()
{
    objVmPost.post = new Post();
    List<Post> mylist = db.Posts.ToList();
    objVmPost.posts = mylist;
    return View("Index",objVmPost);
}

或预先加载

public ActionResult Index()
{
    objVmPost.post = new Post();
    List<Post> mylist = db.Posts.Include(post => post.Comments).ToList();
    objVmPost.posts = mylist;
    return View("Index",objVmPost);
}

您可以阅读更多关于 lazy loading and eager loading

无论您想采用哪种方法,您的 foreach 循环都应如下所示:

foreach(var post in Model.Posts){
    <p>@post.Body</p>
    <p>@post.timeDate</p>
    foreach(var comment in post.Comments){
        <p>@comment.Body</p>
    }
    // here you can add your comment form
}