一步步搭建自己的博客 .NET版(2、评论功能)
前言?
所以打算写个系类:《》 ? ? ? ? 上一篇《》发表之后得到的效应还不错,得到了二十几个赞。然后建的QQ群 两天不到 就有了进三十来个人。大家在群里关于建站经验讨论也是十分热烈。由此可见,大家对拥有自己的独立空间 是多么的渴望。 ? ? 这篇主要是分析 评论功能。在这里,不得不吐槽下 博客园的评论功能。 ? ? 第一、对于阅读者。大家有没有在看评论的时候,看着看着有往上翻?特别是有些对骂的评论,都不知道是谁在骂谁。不得不往上翻那个@的人发的是什么。不知道 这句话 是 对谁的哪句话做的回复。虽然有“引用”功能,但也有很多人没有使用。 ? ? 第二、对于博主。在回复各位园友时,点击回复 ,然后 跳到 最下方,然后评论框 自动出现@*** ?回复之后。想回复下一位,又要把滚动条拖上去。然后 又忘记 这个人是不是已经回复过了。又往下拖 看自己有没有回复过,或者有没有漏掉谁。如果评论够多的话 我相信 各位应该都这样的感觉,我的那个头 我的那个晕。 ? ? 在这里 我就打算规避这类问题,像QQ空间的评论 就很爽,谁在和谁对话 一目了然。 表结构? ? ? 对于这样的一个需求,没有做过的也许一时没有了头绪。这里最主要的关系就是,“引用”- 谁对谁说。是对哪条评论 展开的讨论。 ? ? ? 其实我把表结构拿出来,相信大家就明白了。 ? ? ? 这里 ?我再详细分析下每个字段。 ? ? ? ID:表主键 ? ? ? Content:评论的内容? ? ? ? ? ??CommentID:引用的评论内容的ID。 ? ? ??BlogUsersId:用户ID ? ? ? BlogsId:博客ID ? ? ??ReplyUserID:引用的评论的用户ID。 ? ? ? ReplyUserName:引用的评论的用户名。 ? ? ? CommentSort:没用(本来以为会用到) ? ? ??ContentLevy:没用(本来以为会用到) ? ? ? ?这里要说明下 ? ?CommentID:引用的评论内容的ID。其实并非真的是评论内容ID 而是"父评论ID"。我们为了简单起见,把评论分成两种。 父评论,子评论。什么是父评论,子评论?父:初始评论,子:在父评论的基础上进行评论,或者子评论的基础上进行评论。(这里就不分 子子评论 ?子子子评论了。我想递归应该也可以做到,但不想那么复杂了) ? ? ? 那么上面还有一个字段没有解释: ? ? ??IsInitial ?是否是"父评论" 如图: ? ? ? 实现? ? ?通过对表结构的简单分析,我相信 大家应该已经非常明白 我会怎么去实现了。 ? ?第一、评论提交 BlogId = .Parse(Request.Form[ UserId = MySession.UserInfoSessioin.Id;
CommentID = .Parse(Request.Form[ Content = Request.Form[ ReplyUserID = .Parse(Request.Form[ ReplyUserName = User = BLL.Common.CacheData.GetUserInfo().Where(t => t.Id == ( !== .IsNullOrEmpty(User.UserNickname) ?BLL.BlogCommentBLL comment = <span style="color: #0000ff;">new<span style="color: #000000;"> BLL.BlogCommentBLL();
comment.Add(<span style="color: #0000ff;">new<span style="color: #000000;"> BlogComment() { BlogUsersId =<span style="color: #000000;"> UserId,BlogsId =<span style="color: #000000;"> BlogId,Content =<span style="color: #000000;"> Content,CommentID =<span style="color: #000000;"> CommentID,ReplyUserID =<span style="color: #000000;"> ReplyUserID,ReplyUserName =<span style="color: #000000;"> ReplyUserName,IsInitial = CommentID == -<span style="color: #800080;">1<span style="color: #000000;"> }); comment.save(); ? ? ? ?一目了然,其实就是一个对象存入数据库了。至于每个字段的取值,你想怎么取看你自己的。 ? ?第二、加载评论? ? ? 评论的加载 可能会比提交复杂那么一点。提交有前后 怎么去归类布局呢? ? ? ? 首先要对 父评论 的筛选,然后加载父评论 和 父评论下的子评论。感觉要进行多次数据库的查询,那么我们只能尝试尽可能少的查询。 ? ? ? 下面来具体看实现代码。? ? ?? blogId = .Parse(Request.Form[ pageIndex = .Parse(Request.Form[= <,> dic = Dictionary<,> comObj = ( == PartialView(,comObj);
dic.Add( PartialView(dic);? ? ??
com.GetComment(blogId,pageIndex) 方法 根据 博客ID 和 第几页评论 做为参数,取评论数据,下面给出方法的详细实现:
List
? ??上面进行了二次数据库查询,其余的时候 都是进行 数据集合的筛选。在上面的代码中 我们看到了 方法 GetCom(item,listCom)//?取 顶级评论 下的子评论 List
效果图和演示地址? ? ? ? 在此实现的全部过程都已经分析完了。我们来看看效果图和演示地址。 ? ? ? ? 效果图: ? ? ? ? 演示地址:?(界面丑是丑了点,后期再美化。如果有美工愿意免费合作,非常欢迎~~) ? ? ? ? 如果您对本篇文章感兴趣,那就麻烦您点个赞,您的鼓励将是我的动力。?当然您还可以加入QQ群: ? ? ? ? 如果您有更好的处理方式,希望不要吝啬赐教。 ? ? ? ? 一步步开发自己的博客 .NET版系列: ? ? ? ? 本文链接:? 疑问? ? ?我在构思开发博客的时候,有个疑问。那就是怎样更好的统计文章阅读量。 ? ? ?我知道的方式: ? ? ?第一、通过Cookie。(缺点:如果要进行访问量排行的话,可以人为清理cookie,恶意刷新访问量) ? ? ?第二、通过客户端取得IP(缺点:1.如果访问量大的话,每次插入数据库之前都要先查询是否存在。2.现在我们大多是公用外网IP,无法统计独立访客) ? ? ?疑问:1.cnzz的独立访客(UV)是怎么统计的。2.博客园的文章阅读量是怎么统计的。(进过测试,文章刷新第二遍的时候可以看到 阅读量 加一 ,然后清理cookie 后刷新 阅读量 加一,然后不管怎么刷 都没反应了) ? ? ?如果实在是找不到好的解决方案,我打算用 IP+系统版本+浏览器版本号 作为“联合主键”,如果“主键”24小时内重复两次以上,则不统计,如果cookie存在也不统计。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 使用Openiddict的ASP.NET Core 1.0 OAuth服务器
- asp.net – 如何LoadControl一个使用VaryByControl OutputC
- ASP.NET两个截取字符串的方法分享
- asp.net – 如何使用&在web.config文件
- 限制并发或不限制并发? (在单个ASP.NET请求中)
- 为什么我要在公共站点上使用ASP.NET MVC,在Intranet上使用W
- 为什么System.Attribute的GetHashCode方法需要如此设计?
- asp.net – 如何使用命令行msbuild部署VS2012网站项目,而无
- asp.net – 直接将.aspx转换为.pdf [已关闭]
- Asp.Net:如何允许访问内部网用户的页面,拒绝外网用户?
- asp.net核心 – 在ASP.NET核心应用程序中使用NLo
- asp.net-mvc – 无法在Web服务器上启动调试. Web
- asp.net-mvc – 如何在ASP.NET MVC Web API中将U
- .net – 获取远程名称地址(不是IP)
- asp.net-mvc – ASP.NET MVC中的AntiForgeryToke
- asp.net-mvc – ASP.NET MVC Session vs Global
- 使用CQRS的ASP.NET MVC应用程序的良好读取模型是
- ASP.Net页面刷新后自动滚动到原来位置
- asp.net – 是否有一个简单的方法来呈现具有Micr
- webforms – ASP.NET Web窗体(4.5)强类型模型绑定