我正在使用MVC 3,Razor和实体框架制作一个博客。我现在正在编写Comment部分。
我正在使用下表作为评论。

在这里,我使用'CommentParent‘列,并将其设置为另一个'CommentID’的值,如果用户正在回复注释的,则设置为null。
问题
我使用下面的代码来显示注释,
@foreach (var comment in Model.Comments)
{
<div>
@comment.CommentContent
</div>
<br />
}我不知道如何显示"replyTo“注释,如下图所示.

请有人指点我这是怎么做的。
发布于 2012-07-27 06:09:17
首先,您必须更改模型类,假设您的模型类是:
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类来管理注释的查找。
发布于 2012-07-27 06:27:36
试试这个:
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循环中所做的那样。
我希望这能帮上忙。
https://stackoverflow.com/questions/11682187
复制相似问题