在MVC 3博客中显示嵌套注释

时间:2012-07-27 05:53:02

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

我正在使用MVC 3,Razor和Entity Framework制作博客。我现在正在处理评论部分。

我正在使用下表进行评论。

My Comment table

这里我使用'CommentParent'列并将其设置为另一个'CommentID'的值,如果用户回复到注释,否则我将值设置为null。

问题

我使用以下代码显示评论,

@foreach (var comment in Model.Comments)
{
    <div>
        @comment.CommentContent
    </div>
    <br />
}

我不知道如何显示“replyTo”评论,如下图所示...... enter image description here 请任何人指导我如何做到这一点......

2 个答案:

答案 0 :(得分:2)

首先,您必须更改模型类,假设您的模型类是:

public class CommentsModel
{
     Public Int64 CommentId {get;set;}
     ....
     ....
     //Introduce a new property in it as:
     Public CommentsModel[] ChildComments {get;set;}
}

这个新属性将持有特定评论的儿童评论,最高可达N Level。在您的视图中,您可以这样做:

@foreach (var comment in Model.Comments)
{
    <div>
    @comment.CommentContent
    </div>
    <br />
    @if(comment.ChildComments.Length > 0)
    {
        // Display Level 1 Comments and so on and so far
    }
}

您可以使用Div上的Css Class来管理评论的了望。

答案 1 :(得分:1)

试试这个:

 private void CreateComments(int ? postId, int ? cid)
      {          
        int? id = cid;                
        var replies = new List<Comment>();
        if (postId.HasValue())
        {
              var BlogPost = context.Posts.Single(p=>p.Id == postId.Value);
              replies = BlogPost.Comments.Where(c=>c.CommentParent == null);  
        }
        else
        {
            replies = context.Comments.Where(c=>c.CommentParent == id);         
        }  

        int level = 0;
        Comment tmp = new Comment();
        foreach (Comment reply in replies)
            {     
                tmp = reply;
                while(tmp.CommentParent != null){
                      level++;
                      tmp = context.Comments.Single(c=>c.Id == tmp.CommentParent);
                }
                //logic for creating your html tag 
                //you can use "level" to leave appropriate indent back to your comment.
                CreateComments(null,reply.id);
            }   
     }

修改

你甚至可以像我在foreach循环中所做的那样确定你当前的等级。

我希望这可以提供帮助。