简单实现网易盖楼回复功能
创始人
2024-09-09 11:20:35
0

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

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

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

  1. var comment = StringExtension.ChangeStr(collection["comment"]); 
  2.                     var bbsId = collection["comment_post_ID"].ToString(); 
  3.                     var comment_parent = collection["comment_parent"].ToString(); 
  4.                     //$引用3楼 测试盖楼回复。。。 
  5.                     if (comment.IndexOf("$引用") >= 0) 
  6.                     { 
  7.                         comment = comment.Substring(comment.IndexOf("楼") + 1, comment.Length - comment.IndexOf("楼") - 1); 
  8.                     } 
  9.                     else 
  10.                     { 
  11.                         comment_parent = "0"; 
  12.                     } 
  13.  
  14.                     NetFavCommentModel bbsComment = new NetFavCommentModel 
  15.                     { 
  16.                         commentContent = comment, 
  17.                         NetFavId = Convert.ToInt32(bbsId), 
  18.                         commentParentId = Convert.ToInt32(comment_parent), 
  19.                         commentAddTime = DateTime.Now                         
  20.                     }; 
  21. netFavCommentRepository.AddNetFavComment(bbsComment); 
第三步:查询回复,并以盖楼方式显示。关键代码如下。  
  1. KeyValuePair> bbsComment = netFavCommentRepository.NetFavCommentPagination(pagin, condition); 
  2.             int i = 1; 
  3.             foreach (var item in bbsComment.Value) 
  4.             { 
  5.                 item.louId = i++; 
  6.                 item.commentContent = GetContent(item, bbsComment.Value.ToList()); 
  7.             } 
  8.             ViewBag.bbsComment = bbsComment.Value; 
  9.             ViewBag.bbsCommentCount = bbsComment.Value.Count(); 
其中GetContent很重要,循环查询,将盖楼内容全部显示出来。

相关代码如下:

  1. #region 盖楼回复 
  2.         // 根据当前的Comment得到HTML输出 
  3.         protected string GetContent(object objComment, List list) 
  4.         { 
  5.             string output = ""; 
  6.  
  7.             NetFavCommentModel cmt = (NetFavCommentModel)objComment;                    // 获取当前评论 
  8.             List quoteList = new List();    // 创建当前评论所引用的评论列表 
  9.  
  10.             AddComment(list, quoteList, cmt);        // 为当前评论的引用列表添加项目 
  11.  
  12.             //quoteList.Sort(NetFavCommentModel.GetComparer());    // 对列表排序,顺序排列 
  13.  
  14.             foreach (NetFavCommentModel quote in quoteList)    // 生成引用的评论列表 
  15.             { 
  16.                 output = String.Format( 
  17.                         "
    {0}网友 {1}的原贴:{2}
    ", 
  18.                         output, quote.commentAddMan, quote.commentContent); 
  19.             } 
  20.  
  21.  
  22.             // 添加当前引用 
  23.             output = String.Format( 
  24.                     "{0}楼{1} 发表网友:{2}

    {3}

    {4}

    " + 
  25.                     "
  26.                     "onclick='addQuote({0},{5});'>回复

", 
  •                    cmt.louId, cmt.commentAddTime, cmt.commentAddMan, output, cmt.commentContent, cmt.commentId); 
  •  
  •             return output; 
  •         } 
  •  
  •         // 向quoteList中添加 符合条件的Comment 
  •         protected void AddComment(List list, List quoteList, NetFavCommentModel cmt) 
  •         { 
  •             if (cmt.commentParentId != 0) 
  •             { 
  •                 NetFavCommentModel find = list.Where(n => n.commentId == cmt.commentParentId).FirstOrDefault(); 
  •                 quoteList.Add(find); 
  •  
  •                 // 递归调用,只要CommentId不为零,就加入到引用评论列表 
  •                 AddComment(list, quoteList, find); 
  •             } 
  •             else 
  •                 return; 
  •         } 
  •  
  •         #endregion 
  •  完成后截图如下:

     

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

    原文链接:http://www.cnblogs.com/ushou/archive/2013/03/08/2948402.html

    【编辑推荐】

    1. 浅谈WEB产品信息架构
    2. 如何成为一名优秀的web前端工程师
    3. 前端开发工程师如何在2013年里提升自己
    4. Web前端性能优化进阶路
    5. 2013年2月Web编程语言就业趋势

    相关内容

    热门资讯

    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
    20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
    德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
    为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
    《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
    2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...