asp.net线程注释?

asp.net线程注释?,asp.net,sql,c#-4.0,threaded-comments,Asp.net,Sql,C# 4.0,Threaded Comments,我正在用ASP.NET4.0和SQLServer2008创建一个博客,并想学习如何创建一个线程评论系统。我所说的线程化是指每个评论都有一个回复链接,并且这些评论缩进在作为回复的评论下面。因此,您可以回复文章本身,也可以回复任何评论 这在论坛和博客上非常常见,但我找不到任何文章来解释和展示如何实现这一点的代码示例 以下是我创建的内容,但它只在一个深度上起作用。我想让它递归,所以深度没有限制:。我该怎么做?任何建议,带有代码示例的文章都会很棒 注释数据库表 commentId parentId po

我正在用ASP.NET4.0和SQLServer2008创建一个博客,并想学习如何创建一个线程评论系统。我所说的线程化是指每个评论都有一个回复链接,并且这些评论缩进在作为回复的评论下面。因此,您可以回复文章本身,也可以回复任何评论

这在论坛和博客上非常常见,但我找不到任何文章来解释和展示如何实现这一点的代码示例

以下是我创建的内容,但它只在一个深度上起作用。我想让它递归,所以深度没有限制:。我该怎么做?任何建议,带有代码示例的文章都会很棒

注释数据库表

commentId
parentId
postId
date
author
authorEmail
authorURL
authorIP
content
IsApproved
ASP.NET标记:

存储过程:

ALTER PROCEDURE [dbo].[Sp_blog_getcomments] (@article INT)
AS
    SET nocount ON;

    SELECT post_comments.author,
           post_comments.authoremail,
           post_comments.authorurl,
           post_comments.content,
           post_comments.date,
           post_comments.commentid
    FROM   post_comments
           INNER JOIN posts
                   ON post_comments.postid = posts.postid
    WHERE ( post_comments.postid = @article )
          AND ( post_comments.isapproved = 1 )
          AND ( post_comments.parentid IS NULL )
          AND ( posts.ispublished = 1 )
          AND ( posts.publishondate <= Getdate() )

    SELECT author,
           authoremail,
           authorurl,
           content,
           date,
           parentid
    FROM   post_comments
    WHERE  ( postid = @article )
           AND ( isapproved = 1 ) 

我记得在某处看到的一种方法是,注释没有使用注释ID和父ID,而是使用注释ID和排序键,排序键是它们祖先的所有注释ID的串联

例如,如果评论1有两个回复,即评论2和评论3,则排序键为:

1 : 0001
2 : 0001.0002
3 : 0001.0003
那么,如果有人回复评论2,那将是

4 : 0001.0002.0004
因此,如果选择所有注释并按此排序键排序,它们将按正确的顺序排列

然后,要进行缩进,只需查看排序键的长度,查看注释的深度,并缩进适当的数量


添加注释很简单:新注释的排序键只是它的父级排序键,末尾添加了自己的ID。

我记得在某处看到的一种方法是,注释没有使用注释ID和父级ID,而是使用注释ID和排序键,排序键是它们祖先的所有注释ID的串联

例如,如果评论1有两个回复,即评论2和评论3,则排序键为:

1 : 0001
2 : 0001.0002
3 : 0001.0003
那么,如果有人回复评论2,那将是

4 : 0001.0002.0004
因此,如果选择所有注释并按此排序键排序,它们将按正确的顺序排列

然后,要进行缩进,只需查看排序键的长度,查看注释的深度,并缩进适当的数量


添加评论很简单:新评论的排序键只是它的父级排序键,末尾添加了它自己的ID。

那么你有什么问题吗?@Tony Abrams,我把这个问题放在了最上面。有人能告诉我如何将这个问题再扩展一级吗?我意识到没有人知道如何创建线程评论,但也许这个问题是可行的。那么你有什么问题/问题/问题?@Tony Abrams,我在顶部大胆地提出了这个问题。有人能告诉我如何将这个问题扩展到更高的层次吗?我知道没有人知道如何创建线程评论,但是这个问题可能是可行的。谢谢你的回复!这个字段使用什么数据类型?只是一个varchar。。使其足够长,以支持对注释数量和嵌套深度的任何限制。e、 g.如果您将每篇文章的评论限制为9999条,并且回复深度为5级,那么最长的排序键应该是9999.9999.9999.9999,因此您需要varchar24Carson63000,谢谢您的建议。弄清楚所有细节有点棘手,但我还是设法完成了。最困难的部分是获取要为缩进指定css的点数。存储过程相当简单。对于注释,排序值设置为等于其自己的注释id值;对于注释回复,排序值设置为等于父排序id,并将其与自己的注释id连接起来,用点分隔。如果排序id没有点,则为顶级注释。一个点等于一层深度,两个点等于两层深度等等。谢谢!如果您希望注释按降序排列,是否有人知道如何查询数据。也就是说,最新的评论是先打印出来的。谢谢回复!这个字段使用什么数据类型?只是一个varchar。。使其足够长,以支持对注释数量和嵌套深度的任何限制。e、 g.如果您将每篇文章的评论限制为9999条,并且回复深度为5级,那么最长的排序键应该是9999.9999.9999.9999,因此您需要varchar24Carson63000,谢谢您的建议。弄清楚所有细节有点棘手,但我还是设法完成了。最困难的部分是获取要为缩进指定css的点数。存储过程相当简单。对于注释,排序值设置为等于其自己的注释id值;对于注释回复,排序值设置为等于父排序id,并将其与自己的注释id连接起来,用点分隔。如果排序id没有点,则为顶级注释。一个点等于一层深度,两个点等于两层深度等等。谢谢!如果您希望注释按降序排列,是否有人知道如何查询数据。也就是说,最新的评论是pri 我先来。