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") } } })
留言板效果图
结尾
上述内容就是对留言板功能的大体实现,总的来说,这是一个留言板的简单实现。
标签:
-
世界观热点:个人博客留言板功能实现
ZY知识库留言板功能实现 前言因为这个博客是用的大佬的开源项目,我也是用自己的想法改了很多东西,虽然可
-
@考生和家长 涉高考诈骗重要提醒!
扬子晚报讯(通讯员苏宫新记者梅建明)2023年江苏省普通高校招生考试落下
-
游戏赚钱排行榜第一名(游戏赚钱排行榜) 天天新消息
1、腾讯类我知道,别的游戏我就不太知道了腾讯能赚钱的游戏 自由幻想QQ三国DNF这都是赚钱比较快的
-
设计师资格证查询网站(设计师资格证)
1、室内设计师必须了解室内效果图的工作流程,认识常用菜单和命令版面,为之后的学习打基础。2、能制作出室
-
环球聚焦:今年端午假期或成近五年最火端午
端午节,又称端阳节、龙舟节、重午节、重五节、天中节等,日期在每年农历五月初五,据悉今年端午假期或成近
-
长安汽车总裁王俊:目前汽车产业利润分配不均,离用户端越远利润越高
红星资本局消息,6月9日,2023世界动力电池大会在四川宜宾开幕。本次大会的主题为“绿色新动力·世界新动能
-
信号工是干什么的要证吗(信号工是干什么的)|世界热资讯
来为大家解答以上问题。信号工是干什么的要证吗,信号工是干什么的这个很多人还不清楚,现在一起跟着来瞧瞧
-
环球微速讯:赵睿宣布最新决定,杜锋看懂了,朱芳雨该行动了
赵睿宣布最新决定,杜锋看懂了,朱芳雨该行动了,杜锋,朱芳雨,广东队,广东男篮,男子篮球,国际篮球赛事,阿隆
-
pptv在线观看电视(pptv在线观看)
来为大家解答以上问题,pptv在线观看电视,pptv在线观看很多人还不知道,现在让我们一起来看看吧!1、在ppt
-
夜幕下,一个群体带动城市消费新热潮_焦点要闻
夜幕下,一个群体带动城市消费新热潮
-
一周钢厂动态汇总(6月5日-6月9日)-天天最资讯
一周钢厂动态汇总(6月5日-6月9日)
-
今日热闻!跨越山川大海,这场教共体活动干货满满
潮新闻客户端通讯员钱佳芹近日,杭州市丁兰实验中学的单星梅老师和陈文杰老师带着项目化学习成果来到舟山嵊
-
呼和浩特市二手房“带押过户”操作指南|当前简讯
呼和浩特市二手房“带押过户”操作指南一、新旧抵押权组合模式(模式一)(一)适用买方贷款购房,通过借新
-
伊藤美诚戴奥运金牌回母校,豪言:巴黎夺冠!79岁爷爷为她立碑! 全球最资讯
值得一提的是,伊藤美诚在2021年举办的本土东京奥运会上取得了巨大的成功,斩获混双金牌,这也是日本乒乓球
-
西宁市好的医院排名 全球热讯
西宁整形医院的排名已经更新了,现在西宁的经济发展的还是比较好的,所以成立了很多的整形医院,这些整形医
-
环球关注:成年矫正牙齿会不会牙齿松动,成人矫正牙齿会不会反弹
牙齿整齐洁白,自然会给外人留下非常好的印象,而且因为有些明星会说自己的脸型因为牙齿而改变,所以很多人
-
原创组图 | “共建自贸港——遇见·相约夏日”钢琴音乐会亮相三亚-环球快播
音乐会现场。音乐会专程邀请了星海音乐学院钢琴系教师、研究生导师、雅马哈艺术家、中国音乐家协会会员、广
-
成都大运会火炬传递首站启动!_天天即时看
6月10日上午,成都大运会火炬传递首站在北京大学启动。奥运冠军邹敬园作为首棒火炬手,高举成都大运会火炬
-
王朔电影小红花_王朔电影|天天观点
1、1988:《顽主》(导演:米家山;原著《顽主》)1988:《轮回》(导演:黄建新;原著《浮出海面》)1988:《
-
我的世界 但是蜘蛛侠:参与MCBBS论坛活动赢定制显卡 环球今热点
6月2日,《蜘蛛侠:纵横宇宙》正式上映。本作是索尼影业推出的《蜘蛛侠》动画电影系列第二部。灵魂穿越、异
-
过氧化钠与水反应方程式怎么配平_过氧化钠与水反应方程式 全球新动态
1、过氧化钠与水反应的这个方程式可以认为还有中间的反应。2、Na2O2+2H2O====2NaOH+H2O22H2O2==Δ==2H2O+O2↑,因
-
怎么使用海信网络电视看电视直播(使用海信网络电视看电视直播的方法)
篇文章,小升来为大家解答以上问题。怎么使用海信网络电视看电视直播,使用海信网络电视看电视直播的方法很
-
又见退市!千亿房企泰禾黯然离场_世界今头条
去年的“五一”假期前,泰禾集团发布了公司将被实施其他风险警示暨公司股票停牌的提示性公告,公司股票在5
-
每日资讯:《绝地追击》曝毒战版预告 毒贩拒捕上演亡命火拼
1905电影网讯近日,由邱礼涛(《拆弹专家》系列、《扫毒2天地对决》等)监制并执导,欧豪、谷嘉诚、俞灏明
-
天天速读:骑马与砍杀中文站官网论坛_beautyleg官网论坛
1、1415620213216541032153。本文就为大家分享到这里,希望小伙伴们会喜欢。
-
刀塔完美通行证_dota2国服完美通行证
1、完美账号和dota2账号是两个不相干的本来是找不到的,但是昨天问我的有个网友还真给找出来了。2、“我已
-
2023年京津冀农业科技协同创新大会在石家庄市召开|全球热门
6月7日,2023年京津冀农业科技协同创新大会在石家庄市召开。会上发布了京津冀农业科技创新联盟重大科技成果
-
暴雨预警!福建部分地区将有大到暴雨 世界微头条
6月9日08时至10日08时,,广西南部和东北部、湖南南部、江西南部、福建中南部、广东西北部、云南西部、四川
-
商用四年融入超六成国民经济大类 5G应用未来可期 当前视讯
据工业和信息化部数据,截至今年4月底,我国累计建成5G基站达273 3万个;5G移动电话用户达6 34亿户,占移动
-
ie图标没有了_桌面ie图标不见了怎么办-天天新动态
1、方法一:在其他盘里(C盘以外的盘)新建个文件夹,文件夹为取名为“InternetExplorer {871C53
广告
X 关闭
- 航母板块12月20日涨0.08%,宝塔实业领涨,主力资金净流入1.94亿元 世界即时
- 工信部:截至10月底全国共有110个城市达到千兆城市建设标准-世界快播
- 2023-2028年中国凝胶成像仪行业市场深度分析及投资潜力预测报告-世界今亮点
- 创业慧康: 关于2019年限制性股票激励计划首次授予部分第三个解锁期解锁条件成就的公告
- 焦点快看:威海市商业银行 加大普惠金融力度 支持小微企业发展
- 当前播报:3小时!开发ChatGPT微信小程序
- 协程这么好,它能完全代替线程么?
- 湖人正式裁掉马特-瑞安 预示将有大交易发生?
- 华东数控董秘回复:公司主营业务为研发、生产和销售数控机床、普通机床及其关键功能部件,未研发钠离子电池生产设备
- 2023-2028年中国凝胶成像仪行业市场深度分析及投资潜力预测报告-世界今亮点
- 创业慧康: 关于2019年限制性股票激励计划首次授予部分第三个解锁期解锁条件成就的公告
- 焦点快看:威海市商业银行 加大普惠金融力度 支持小微企业发展
- 当前播报:3小时!开发ChatGPT微信小程序
- 协程这么好,它能完全代替线程么?
- 湖人正式裁掉马特-瑞安 预示将有大交易发生?
- 华东数控董秘回复:公司主营业务为研发、生产和销售数控机床、普通机床及其关键功能部件,未研发钠离子电池生产设备
- 今日大上海:一边核酸检测亭空空荡荡,一边电影院人流如织、快递派送量翻倍
- 本周盘点(12.12-12.16):茂业商业周涨0.27%,主力资金合计净流出300.70万元
广告
X 关闭
-
航母板块12月20日涨0.08%,宝塔实业领涨,主力资金净流入1.94亿元 世界即时
-
工信部:截至10月底全国共有110个城市达到千兆城市建设标准-世界快播
-
2023-2028年中国凝胶成像仪行业市场深度分析及投资潜力预测报告-世界今亮点
-
创业慧康: 关于2019年限制性股票激励计划首次授予部分第三个解锁期解锁条件成就的公告