EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

.NET Core 评论区建立逻辑

材料:邮箱+验证码

一般博客评论区制作

通常情况下,我们要准备Id和ParentId两个字段,

在取数据的时候,第一步先foreach评论表钟ParentI=0的字段,这表示基本楼层,

只有当ParentId≠0,才知道这是回复给楼层的。

写.cshtml代码的话,基本逻辑就是:

foreach(var parent in Model){
       //渲染基础楼层
      foreach(var child in Model){
          //判定有没有子楼层    
          if(child.parentId==parentId){
            //渲染子楼层
          }
      }
}

然后是你的表单提交逻辑,表单提交的时候,无论如何,你回复对象的Id,必然是从前台获得的,这个值会被更改,所以一般要注意检测合理性。

表单提交,你向后台提交 自己的name\email\website\content,同时要提交别人的Id,因为你可能是reply某人。

最后就是邮箱功能,邮箱最好是别人一提交表单,你就能收到提醒邮件,

别人回复别人,也自动发一份邮件过去,

这个时候,Ta回复的对象和你都收到了提醒邮件,一共两封。


简化模型(单位:楼):

1→0,需要发1封电子邮件;
2→1,需要发2封电子邮件;
3→2,需要发3封电子邮件。

0层代表自己,1→0代表博客下的第一个评论;

2→1代表2回复1,这时候2成为了楼中楼,

3→2就是在回复楼中楼。

解析:

点击Submit按钮

在1→0的情况下,需要给博主发邮件。

在2→1的情况下,需要给1发邮件,给博主发邮件。

在3→2的情况下,需要给2发邮件,给楼主发邮件,给博主发邮件。

通常情况下3→2的情况下,最好只给reply to 的对象发邮件,因为当楼层盖太多之后,楼主会被骚扰频繁,而且还都不是回复给楼主的。

但考虑到百度贴吧也是这么做的,即使是楼中楼回复楼中楼,楼主还是会被消息提醒,所以不变更。


最后的最后,考虑以下点击提交按钮的加载动画。

发邮件是异步进行的,程序逻辑首先会在0.5秒钟之内完成数据库的存储,但是邮件需要等待数秒以上才会返回结果,

那么我们应该在form上面加一个onsubmit的方法,让该方法执行loading动画,并在1秒之内自动刷新该页面。

刷新完成后,用户一定会看到自己的评论附加上去了,但实际上邮件的发送还在后台进行,这样对用户体验良好。

 

扩展阅读:

[1] .NET Core 如何发送电子邮件

This article was last edited at 2020-06-20 00:29:12

* *