好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

回复的简易实现

回复的简易实现

回复的简易实现

前些日子写了篇博客,网友给予了很多的评论,在查看及回复评论的过程中,也是发现博客园现有回复的不太好,举例如下,现有的回复如下图所示:

,这里根本看不出来tony_ontheway说了什么,还要我一个一个找,哦,原来他是在第N页第N行说了这个,所以非常的不方便。

所以今天我把网易盖楼回复的实现原理以及 实例Demo 贴出,望博友们顶起来,让博客园整改一下,必竟,博客园是我们的大本营,是我们学习知识的地方。这里高手如云,精英荟萃,我们的大本营也不能太差,是吧。我们让博客园改进,也是为自己创建良好的环境,所以,博友们,顶起来,吼起来,一起唤起博客园的注意。

实现盖楼回复大致分三部。

第一步:建数据库表,这个表需要有ID及父ID.

第二步:添加回复,添加回复的关键代码如下:

 var  comment = StringExtension.ChangeStr(collection[ "  comment  "  ]);
                      var  bbsId = collection[ "  comment_post_ID  "  ].ToString();
                      var  comment_parent = collection[ "  comment_parent  "  ].ToString();
                      //  $引用3楼 测试盖楼回复。。。 
                     if  (comment.IndexOf( "  $引用  " ) >=  0  )
                    {
                        comment  = comment.Substring(comment.IndexOf( "  楼  " ) +  1 , comment.Length - comment.IndexOf( "  楼  " ) -  1  );
                    }
                      else  
                    {
                        comment_parent  =  "  0  "  ;
                    }

                    NetFavCommentModel bbsComment  =  new   NetFavCommentModel
                    {  
                        commentContent  =  comment,
                        NetFavId  =  Convert.ToInt32(bbsId),
                        commentParentId  =  Convert.ToInt32(comment_parent),
                        commentAddTime  =  DateTime.Now                        
                    };
netFavCommentRepository.AddNetFavComment(bbsComment); 

第三步:查询回复,并以盖楼方式显示。关键代码如下。

            KeyValuePair<Pagination, IList<NetFavCommentModel>> bbsComment =  netFavCommentRepository.NetFavCommentPagination(pagin, condition);
              int  i =  1  ;
              foreach  ( var  item  in   bbsComment.Value)
            {
                item.louId  = i++ ;
                item测试数据mentContent  =  GetContent(item, bbsComment.Value.ToList());
            }
            ViewBag.bbsComment  =  bbsComment.Value;
            ViewBag.bbsCommentCount  = bbsComment.Value.Count();

其中GetContent很重要,循环查询,将盖楼内容全部显示出来。

相关代码如下:

        #region  盖楼回复
         //   根据当前的Comment得到HTML输出 
         protected   string  GetContent( object  objComment, List<NetFavCommentModel>  list)
        {
              string  output =  ""  ;

            NetFavCommentModel cmt  = (NetFavCommentModel)objComment;                     //   获取当前评论 
            List<NetFavCommentModel> quoteList =  new  List<NetFavCommentModel>();     //   创建当前评论所引用的评论列表 
 
            AddComment(list, quoteList, cmt);          //   为当前评论的引用列表添加项目

              //  quoteList.Sort(NetFavCommentModel.GetComparer());      //   对列表排序,顺序排列 

             foreach  (NetFavCommentModel quote  in  quoteList)     //   生成引用的评论列表 
             {
                output  =  String.Format(
                          "  <div>{0}<span>网友 {1}的原贴:</span><br />{2}</div>  "  ,
                        output, quote测试数据mentAddMan, quote测试数据mentContent);
            }


              //   添加当前引用 
            output =  String.Format(
                      "  <div class='comment'><p class='title'><span>{0}楼{1} 发表</span>网友:{2}</p>{3}<p>{4}</p>  "  +
                     "  <p style='text-align:right;'><a class='comment-reply-link' href='#comment'   "  +
                     "  onclick='addQuote({0},{5});'>回复</a></p></div>  "  ,
                   cmt.louId, cmt测试数据mentAddTime, cmt测试数据mentAddMan, output, cmt测试数据mentContent, cmt测试数据mentId);

              return   output;
        }

          //   向quoteList中添加 符合条件的Comment 
         protected   void  AddComment(List<NetFavCommentModel> list, List<NetFavCommentModel>  quoteList, NetFavCommentModel cmt)
        {
              if  (cmt测试数据mentParentId !=  0  )
            {
                NetFavCommentModel find  = list.Where(n => n测试数据mentId ==  cmt测试数据mentParentId).FirstOrDefault();
                quoteList.Add(find);

                  //   递归调用,只要CommentId不为零,就加入到引用评论列表 
                 AddComment(list, quoteList, find);
            }
              else 
                 return  ;
        }

          #endregion 

 完成后截图如下:

 

最后给出Demo 示例网址  。本项目的源码就不提供了,提供一套原生版Demo,有需要请 下载 。

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于回复的简易实现的详细内容...

  阅读:56次