首页>资讯>正文
个人博客留言板功能实现
2023-06-11 17:15:48    来源:博客园

ZY知识库留言板功能实现

前言

因为这个博客是用的大佬的开源项目,我也是用自己的想法改了很多东西,虽然可能写的不是很好,但是我自己想要的效果实现了,开源项目不就是用来学习的嘛,所以不能一层不变,之前首页改版、评论功能我都没有写文章,这次抽空更新了留言板功能,来水一篇文章。

留言板地址:ZY知识库 · ZY - 留言板 (pljzy.top)

留言类和回复类

首先我创建了如下2个类,类型无非就是int、string、DateTime,这里就不做多的解释了


(资料图)

留言类

字段名解释
Id主键
Name留言者昵称
Email留言者邮箱
Message留言内容
Created留言时间

回复类

字段名解释
Id主键
MessageId留言类外键
Name回复者昵称
Email回复者邮箱
Reply回复内容
Created留言时间

Service层实现

然后我创建了IMessagesService接口类,列举部分如下:

using msg = Personalblog.Model.Entitys.Messages;public interface IMessagesService{    //新增留言    Task SubmitMessageAsync(msg messages);    //查询所有留言,分页列表    IPagedList GetAll(QueryParameters param);}

然后用MessagesService类实现这个接口类:

public class MessagesService:IMessagesService{    private readonly MyDbContext _myDbContext;    public MessagesService(MyDbContext myDbContext)    {        _myDbContext = myDbContext;    }    public async Task SubmitMessageAsync(Messages messages)    {        StringBuilder sb = CommentSJson.CommentsJson(messages.Message);        messages.Message = sb.ToString();        messages.created_at = DateTime.Now;        await _myDbContext.Messages.AddAsync(messages);        await _myDbContext.SaveChangesAsync();        return messages;    }    public IPagedList GetAll(QueryParameters param)    {        return _myDbContext.Messages.Include(m => m.Replies).ToList().ToPagedList(param.Page, param.PageSize);    }}

IPagedList是一个分页插件,用NuGet下载X.PagedList/8.4.3CommentsJson方法是用来处理quill富文本编辑器传过来的内容,这里就不做解释了。

配置文件依赖注入

builder.Services.AddTransient();

Controller层实现

public class MsgBoardController : Controller{    private readonly IMessagesService _messagesService;    public MsgBoardController(IMessagesService messagesService)    {        _messagesService = messagesService;    }    // GET    public async Task Index(int page = 1, int pageSize = 10)    {        MsgBoardList msgBoardList = new MsgBoardList()        {            PagedList = _messagesService.GetAll(new QueryParameters            {                Page = page,                PageSize = pageSize            }),            ...        };        return View(msgBoardList);    }    ///     /// 新增留言    ///     ///     ///     [HttpPost]    public async Task SubMessage([FromBody]Messages messages)    {        if(messages.Message == null || messages.Message == "")            return new ApiResponse(){Data = "请输入留言内容",Message = "请输入留言内容",StatusCode = 422};        if(messages.Name == null || messages.Name == "")            return new ApiResponse(){Message = "请输入昵称~",StatusCode = 422};        if (messages.Email == null || messages.Email == "")            return new ApiResponse(){Message = "请输入邮箱~",StatusCode = 422};        bool isValid = CheckEmail.CheckEmailFormat(messages.Email);        if (!isValid)        {            return new ApiResponse(){Message = "邮箱格式错误~",StatusCode = 422};        }        try        {            return new ApiResponse(){Data = GetHtml(await _messagesService.SubmitMessageAsync(messages)),Message = "留言成功",StatusCode = 200};        }        catch (Exception e)        {            return new ApiResponse() { Data = "服务器异常!", Message = "服务器异常!", StatusCode = 500 };        }    }}

因为是MVC项目所以控制器继承Controller类,然后后台管理的接口则是继承ControllerBase用于实现Restful风格接口。

前端部分实现

@foreach (var m in Model.PagedList) { @await Html.PartialAsync("Widgets/MsgBoxList",m) }

分布视图MsgBoxList用于显示留言

分布视图MsgBoxReplyList用于显示该留言是否有人回复

MsgBoxList

@model Personalblog.Model.Entitys.Messages
@Model.created_at @Model.Name
@Html.Raw(@Model.Message)
@if (Model.Replies.Any()){ @await Html.PartialAsync("Widgets/MsgBoxReplyList",Model.Replies)}

利用ajax请求发送留言

部分代码

$.ajax({            url:"/MsgBoard/SubMessage/",            type:"post",            data:JSON.stringify({                "Name":""+Name+"",                "Email":""+Email+"",                "Message":""+Content+""            }),            contentType: "application/json",            success:function (data){                if (data.statusCode === 200){                    alert(data.message, "success")                     const CommentList = document.getElementById("CommentList")                    const html = data.data                    CommentList.insertAdjacentHTML("beforeend", html);                    clearInput()                }else{                    alert(data.data, "danger")                }                 $("#btnComent").prop("disabled", false);             },            error:function(xhr,status,error){                 $("#btnComent").prop("disabled", false);                  if (xhr.status === 429){                    alert("请求过于频繁,请稍后再试。","warning")                }else if (xhr.status === 422){                    alert(xhr.responseJSON.message,"warning")                 }                else{                    alert("服务器异常,请稍后再试!!!","danger")                }            } })

留言板效果图

结尾

上述内容就是对留言板功能的大体实现,总的来说,这是一个留言板的简单实现。

关键词:

个人博客留言板功能实现

ZY知识库留言板功能实现 前言因为这个博客是用的大佬的开源项目,我也2023-06-11

云集美股涨14.51%

中国经济网北京6月10日讯云集(NASDAQ:YJ)美股周五收报0 22美元,涨幅142023-06-11

最美童星长大后惊艳全网!16岁时因“不够性感”被导演刷掉,她霸气怒怼:恶心的猪!_世界短讯

从十岁的小女孩到收入最高的女明星,女演员们尚没有挣脱这种困境。2023-06-11

全球热资讯!孩子老说肚子痛 这是怎么了?

“我家孩子近半年不知道喊过多少次肚子痛了,有时是在吃饭的时候,有时2023-06-11

高质量发展调研行 | 在智慧港口见证大湾区经济活力——广州南沙港走访一线见闻-全球看点

提到港口,你会想到什么?头戴安全帽的工人在操作吊机,还是一辆辆卡车2023-06-11

第二届联合国人居大会闭幕 通过“人人享有可负担住房”等决议 世界热议

第二届联合国人居大会9日在位于肯尼亚首都内罗毕的联合国人类住区规划2023-06-11

文化IP智能应用让历史文化“活”起来|热点

深圳新闻网2023年6月10日讯(深圳特区报首席记者戴晓蓉)在数字时代,2023-06-11

居理买房暴雷!前员工称“欠薪千万元,丈母娘顶替法人”

居理买房暴雷!前员工称“欠薪千万元,丈母娘顶替法人”2023-06-11

环球通讯!许嵩官方论坛账号_许嵩官方论坛

1、登陆VAECN点版主的位置,找到铛铛或者鱼头,总之是管理就行了。2、2023-06-11

亚视演员林国雄_亚视演员 环球热点评

1、冯宝宝2、木博最喜欢苗可秀的三部戏:《天蚕变》《历代奇女子》《飞2023-06-11

40岁离开公立医院,美女医生开创私人诊所

从医生到老板,如何面对身份转变?2023-06-11

欧阳靖维护欧阳娜娜:跟她合作绝对是我的荣幸|消息

欧阳娜娜与欧阳靖在《中国说唱巅峰对决》上进行合作表演,有网友评论道2023-06-11

专家企业家齐聚哈尔滨 共谋人工智能引领龙江数字经济发展

活动现场签署战略合作框架协议。 中关村孵化器供图  哈尔滨6月10日2023-06-11

Intel显卡半价卖! 蓝戟Arc A380降至759|热讯

蓝戟的ArcA380Index降到了仅仅759元,去年刚发布时还是1299元,目前基2023-06-11

中证金融市场化转融资业务试点6月13日转常规

本报记者田鹏6月9日,据中国证券金融股份有限公司(以下简称“中证金融2023-06-11

环球报道:端午假期机票比“五一”便宜两成,你想好去哪玩了吗?

由于避开了暑期旅游高峰,端午节前后的国内国际机票价格较高峰期都划算2023-06-11

世界观速讯丨丧假的国家规定

1、根据原国家劳动总局、财政部《关于国营企业职工请婚丧假和路程假问2023-06-11

全球新资讯:四川改名很“成功”的3个城市,改名前少有人知,一个是都江堰

我们国家的历史悠久,每个地方也都有自己的发展轨迹,在发展的过程中他2023-06-11

35平方的电缆一米有多少纯铜(35平方铜芯电缆一米多少斤)

相信大家对35平方的电缆一米有多少纯铜,35平方铜芯电缆一米多少斤的问2023-06-11

【世界时快讯】暗黑4威能类型介绍

暗黑4威能的类型是很多暗黑玩家都关注的,暗黑4是最新才发售的暴雪力作2023-06-11

暗黑4威能不同位置的效果加成介绍_环球快看

暗黑4威能不同位置的效果加成是很多暗黑玩家都关注的,暗黑4是最新才发2023-06-11

热点在线丨水淹道床影响列车运行!合肥发布情况通报

6月10日8时20分许,沪蓉线长安集至南分路间突发不明水源水淹道床,影响2023-06-11

速看!因自来水厂停电,河南信阳市商城县城停水-讯息

据商城县自来水总公司消息,因供电公司电网设备突发故障,导致自来水厂2023-06-11

“深海发现之旅”在国家海洋博物馆启动

本次活动旨在通过丰富多彩的活动加强市民对于深海大洋的认识。2023-06-11

ivms4200电脑客户端_ivms 4200|天天短讯

1、在配置面板里面,左边的窗口里单击右键,添加设备,然后查看在线设2023-06-11

滚动
资讯