2

MVC 3、Razor、EntityFrameworkを使用してブログを作成しています。現在、コメントセクションに取り組んでいます。

コメントには次の表を使用しています。

マイコメントテーブル

ここでは、「CommentParent」列を使用して、ユーザーがコメントに返信している場合は別の「CommentID」の値を設定しています。それ以外の場合は、nullの値を設定しています。

問題

コメントを表示するために次のコードを使用していますが、

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

下の画像に示すように、「replyTo」コメントを表示する方法がわかり ここに画像の説明を入力してください ません...これを行う方法を教えてください...

4

2 に答える 2

2

まず、モデル クラスを変更する必要があります。モデル クラスが :

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

この新しいプロパティは、特定のコメントの子コメントを N レベルまで保持します。あなたのビューよりも、次のようにすることができます:

@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
    }
}

Divs で Css Class を使用して、コメントのルックアウトを管理できます。

于 2012-07-27T06:09:17.370 に答える
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 ループ内で行ったように、現在のレベルを判断することもできます。

これが役立つことを願っています。

于 2012-07-27T06:27:36.883 に答える