我正在使用MVC 3,Razor和Entity Framework制作博客。我现在正在处理评论部分。
我正在使用下表进行评论。
这里我使用'CommentParent'列并将其设置为另一个'CommentID'的值,如果用户回复到注释,否则我将值设置为null。
我使用以下代码显示评论,
@foreach (var comment in Model.Comments)
{
<div>
@comment.CommentContent
</div>
<br />
}
我不知道如何显示“replyTo”评论,如下图所示...... 请任何人指导我如何做到这一点......
答案 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循环中所做的那样确定你当前的等级。
我希望这可以提供帮助。