个人博客留言板功能实现_短讯
2023-06-10 14:28:24来源:博客园
ZY知识库留言板功能实现
前言
因为这个博客是用的大佬的开源项目,我也是用自己的想法改了很多东西,虽然可能写的不是很好,但是我自己想要的效果实现了,开源项目不就是用来学习的嘛,所以不能一层不变,之前首页改版、评论功能我都没有写文章,这次抽空更新了留言板功能,来水一篇文章。
(相关资料图)
留言板地址:ZY知识库 · ZY - 留言板 (pljzy.top)
留言类和回复类
首先我创建了如下2个类,类型无非就是int、string、DateTime,这里就不做多的解释了
留言类
字段名 | 解释 |
---|---|
Id | 主键 |
Name | 留言者昵称 |
留言者邮箱 | |
Message | 留言内容 |
Created | 留言时间 |
回复类
字段名 | 解释 |
---|---|
Id | 主键 |
MessageId | 留言类外键 |
Name | 回复者昵称 |
回复者邮箱 | |
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.3
包CommentsJson
方法是用来处理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 @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") } } })
留言板效果图
结尾
上述内容就是对留言板功能的大体实现,总的来说,这是一个留言板的简单实现。
标签:
责任编辑:hnmd003
相关阅读
阅读排行
资讯播报
- 连衣裙带来甜美气息,诠释出时髦...
- 环球观焦点:高品质“一刻钟便民...
- 川观评论 | 坚守“最佳” 创...
- 从“开膛破肚”到“微创手术” ...
- 杯具!上海一小区电动车爆炸起火...
- 环球关注:2023年高考顺利落幕 ...
- 身体吸脂多久能看出来瘦?|焦点信息
- 科勒电子纸智能马桶震撼发布-观天下
- 20xx年房屋出租合同范文参考范文
- 从南宁来到厦门 两件南侨机工文...
- 世界热推荐:被低估的智能门锁,...
- 【新视野】延安市人民医院顺利完...
- 崔永辉走访调研部分中央驻厦单位
- dl581p打印机怎样设置_DL缬氨酸|...
- 仔猪死亡率高达80%以上,猪弓形...
- 天天速看:广汇汽车与工行江西省...
- 全球今日讯!2020年冬至几点开始...
- 天水 鲜花扮靓城市 盛装喜迎节会
- 当前快讯:宁德时代回应合资企业...
- 全球消息!王长田:《哪吒2》《...
- 诗词里的遗产:龙虎天下绝 千载...
- 滚动播报:厦门启动防御暴雨洪水...
- 第三届中国(青海)国际生态博览...
- 【环球播资讯】今晚,呼和浩特公...
- 【乡村振兴在青海】吉曲河畔再做...
- 干红葡萄酒兑什么饮料好喝?
- 我市开展工会爱心托管工作交流活动
- 联想服务器连续三季度全球第三!...
- 中国电科发布生成式人工智能大模...
- AMD超威卓越平台全面登陆国内式...
- 焦点讯息:榆钱窝窝怎么做 榆钱...
- 【天天时快讯】老百姓的“柴米油...
- 攀枝花有什么方便携带的土特产 实时
- 【世界播资讯】红酒和杏仁能同食吗?
- oppo来电闪光灯在哪里关(oppo手...
- 观点:饮酒配什么蔬菜好吃?
- 江苏2023年普通高考顺利结束 ...
- 武汉挂牌21宗地块:17宗宅地起始...
- 焦点热门:魔兽世界缠结传说在哪...
- 黑龙江12件涉黑涉恶案件集中公开...
- 【全球快播报】信息动态:谷歌助...
- 焦点日报:昔日荒山变为幸福“金...
- 赶紧转给爸妈!陕西警方紧急预警...
- 牛肉致癌原因 牛肉致癌
- 微视频 | 溪下瓜田甜万家|即时
- 信息:鸿富瀚(301086)报收于70.0...
- 旱碱麦成“名片”迎来丰收 盐碱...
- 组图|2023高考结束!青春不散场...
- 快看点丨艳的组词 颜的组词
- 资讯:学制苗族银饰 传承非遗之美
- 每日热文:书香政协 悦读同行—...
- 信息动态:Facebook使用人工智能...
- 蓉火传递启动|大运火炬在北大启...
- 环球聚焦:AI前沿速报0610:智源...
- 秋葵炒蛋的做法王刚?
- 环球精选!邓亚丽带队调研铜川优...
- 意外险一般赔付多少?赔付多久能...
- 仔猪死亡率高达80%以上,猪弓形...
- 柜员的工作内容_柜员 世界热文
- 世界要闻:如何一键修复albo1125...
- 克莱默夫妇属于什么类型电影_克...
- 麻辣鸡块适合什么配菜?
- 新闻1+1丨升级后的“村BA”,“...
- 漫威最抗揍超级英雄,抗揍指数直...
- 华硕BIOS修复蓝屏解决方法需要哪...
- 《斗罗大陆》大结局有彩蛋?唐三...
- 斗罗:修罗唐三差点沦为冷血动物...
- 东莞信用贷款的额度如何确定?-...
- 留守儿童的定义外出务工省内算吗...
- 世界今日报丨耜怎么读_耦怎么读
- T114 猛禽|世界关注
- 普元信息与浪潮科技启动战略合作...
- sd卡坏了修复手机软件有什么方法...
- 每日短讯:【原】5月12星期四
- 强者恒强,江铃福特全顺何以持续...
- 【文体市场面面观】“两个效益”...
- 3岁男孩患象鼻病全球仅34例 是...
- 中国首座大型区域综合性非遗馆将...
- 每日讯息!文化和自然遗产日丨河...
- 沪蓉线长安集至南分路间突发不明...
- 全球消息!因果在哪里
- 【新要闻】5招化解更年期潮热 ...
- 【环球播资讯】特色集市、非遗演...
- 汕尾重点推介文旅资源-环球看热讯
- 中国经济体制改革研究会副会长樊...
- 长安汽车胡铁刚:预计新能源车达...
- 文化IP智能应用让历史文化“活”起来
- 手机验证码怎么查询_手机验证 ...
- 天天看点:国宝画重点丨上天入海...
- 【当前热闻】成人意外险哪款最好...
- qq音乐里的歌怎么转换成mp3格式_...
- 阳光百万医疗优缺点有哪些?多少...
- 全球聚焦:19家车企公布5月产销...
- 热议:省市区联合开展 “国际档...
- 黑龙江12件涉黑涉恶案件集中公开...
- 梅西抵达北京,开启第七次访华之...
- 以文塑旅 以旅彰文 融合发展 ...
- 【全球新要闻】自媒体是什么怎么...
- 成都第31届世界大学生夏季运动会...
- 衢州患尿毒症的大爷吃了一袋桃子...