ZY知識(shí)庫(kù)留言板功能實(shí)現(xiàn)
前言
因?yàn)檫@個(gè)博客是用的大佬的開(kāi)源項(xiàng)目,我也是用自己的想法改了很多東西,雖然可能寫(xiě)的不是很好,但是我自己想要的效果實(shí)現(xiàn)了,開(kāi)源項(xiàng)目不就是用來(lái)學(xué)習(xí)的嘛,所以不能一層不變,之前首頁(yè)改版、評(píng)論功能我都沒(méi)有寫(xiě)文章,這次抽空更新了留言板功能,來(lái)水一篇文章。
(資料圖片)
留言板地址:ZY知識(shí)庫(kù) · ZY - 留言板 (pljzy.top)
留言類(lèi)和回復(fù)類(lèi)
首先我創(chuàng)建了如下2個(gè)類(lèi),類(lèi)型無(wú)非就是int、string、DateTime,這里就不做多的解釋了
留言類(lèi)
| 字段名 | 解釋 |
|---|---|
| Id | 主鍵 |
| Name | 留言者昵稱(chēng) |
| 留言者郵箱 | |
| Message | 留言?xún)?nèi)容 |
| Created | 留言時(shí)間 |
回復(fù)類(lèi)
| 字段名 | 解釋 |
|---|---|
| Id | 主鍵 |
| MessageId | 留言類(lèi)外鍵 |
| Name | 回復(fù)者昵稱(chēng) |
| 回復(fù)者郵箱 | |
| Reply | 回復(fù)內(nèi)容 |
| Created | 留言時(shí)間 |
Service層實(shí)現(xiàn)
然后我創(chuàng)建了IMessagesService接口類(lèi),列舉部分如下:
using msg = Personalblog.Model.Entitys.Messages;public interface IMessagesService{ //新增留言 Task SubmitMessageAsync(msg messages); //查詢(xún)所有留言,分頁(yè)列表 IPagedList GetAll(QueryParameters param);} 然后用MessagesService類(lèi)實(shí)現(xiàn)這個(gè)接口類(lèi):
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是一個(gè)分頁(yè)插件,用NuGet下載X.PagedList/8.4.3包CommentsJson方法是用來(lái)處理quill富文本編輯器傳過(guò)來(lái)的內(nèi)容,這里就不做解釋了。
配置文件依賴(lài)注入
builder.Services.AddTransient
Controller層實(shí)現(xiàn)
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 = "請(qǐng)輸入留言?xún)?nèi)容",Message = "請(qǐng)輸入留言?xún)?nèi)容",StatusCode = 422}; if(messages.Name == null || messages.Name == "") return new ApiResponse(){Message = "請(qǐng)輸入昵稱(chēng)~",StatusCode = 422}; if (messages.Email == null || messages.Email == "") return new ApiResponse(){Message = "請(qǐng)輸入郵箱~",StatusCode = 422}; bool isValid = CheckEmail.CheckEmailFormat(messages.Email); if (!isValid) { return new ApiResponse(){Message = "郵箱格式錯(cuò)誤~",StatusCode = 422}; } try { return new ApiResponse(){Data = GetHtml(await _messagesService.SubmitMessageAsync(messages)),Message = "留言成功",StatusCode = 200}; } catch (Exception e) { return new ApiResponse() { Data = "服務(wù)器異常!", Message = "服務(wù)器異常!", StatusCode = 500 }; } }} 因?yàn)槭荕VC項(xiàng)目所以控制器繼承Controller類(lèi),然后后臺(tái)管理的接口則是繼承ControllerBase用于實(shí)現(xiàn)Restful風(fēng)格接口。
前端部分實(shí)現(xiàn)
留言列表 @foreach (var m in Model.PagedList) { @await Html.PartialAsync("Widgets/MsgBoxList",m) }分布視圖MsgBoxList用于顯示留言
分布視圖MsgBoxReplyList用于顯示該留言是否有人回復(fù)
MsgBoxList:
@model Personalblog.Model.Entitys.Messages @Html.Raw(@Model.Message) @if (Model.Replies.Any()){ @await Html.PartialAsync("Widgets/MsgBoxReplyList",Model.Replies)}利用ajax請(qǐng)求發(fā)送留言
部分代碼
$.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("請(qǐng)求過(guò)于頻繁,請(qǐng)稍后再試。","warning") }else if (xhr.status === 422){ alert(xhr.responseJSON.message,"warning") } else{ alert("服務(wù)器異常,請(qǐng)稍后再試!!!","danger") } } })留言板效果圖
結(jié)尾
上述內(nèi)容就是對(duì)留言板功能的大體實(shí)現(xiàn),總的來(lái)說(shuō),這是一個(gè)留言板的簡(jiǎn)單實(shí)現(xiàn)。
標(biāo)簽:
- 淮劇《小白楊》深情上演 致敬一代代援疆人的“精神豐碑”
- 寧德時(shí)代出資20億元在洛陽(yáng)成立新公司 經(jīng)營(yíng)范圍含電池制造等業(yè)務(wù)_即時(shí)焦點(diǎn)
- 小法:我尊重圖多爾但他不尊重我,溫格觀戰(zhàn)是我給他買(mǎi)的票_今日快看
- 農(nóng)發(fā)行湖南省分行違反金融統(tǒng)計(jì)規(guī)定被警告并罰款135.4萬(wàn)元 速讀
- 黃曉明回應(yīng)為新戲增肥30斤:這是我人生中最快樂(lè)的時(shí)光 觀速訊
- 每日動(dòng)態(tài)!國(guó)家統(tǒng)計(jì)局:9月份社會(huì)消費(fèi)品零售總額增長(zhǎng)3.0%
- 中國(guó)之變|這五年,數(shù)字化點(diǎn)亮新生活-每日觀點(diǎn)
- 大行評(píng)級(jí)丨里昂:上調(diào)臺(tái)積電目標(biāo)價(jià)至2000新臺(tái)幣 維持“高度確信跑贏大市”評(píng)級(jí)_每日時(shí)訊
- 熱消息:內(nèi)蒙古赤峰農(nóng)村牧區(qū)產(chǎn)權(quán)流轉(zhuǎn)服務(wù)中心完成首單交易
- 熱資訊!贛C支持湘C!宜春“老表”跨城應(yīng)援
- 丹尼-格林:姚明如不傷難以想象,文班或能成為他本該成為的人
- 房產(chǎn)投資的風(fēng)險(xiǎn)與收益權(quán)衡?
- 鼎佳精密:10月17日獲融資買(mǎi)入291.41萬(wàn)元_快資訊
- 財(cái)報(bào)速遞:達(dá)瑞電子2025年前三季度凈利潤(rùn)2.31億元 每日動(dòng)態(tài)
- 廣州湛建建材有限公司成立 注冊(cè)資本10萬(wàn)人民幣|焦點(diǎn)快播
- 今日熱搜:時(shí)空科技擬“跨界”收購(gòu) 切入半導(dǎo)體存儲(chǔ)賽道
- 當(dāng)前聚焦:佑駕創(chuàng)新中標(biāo)1185萬(wàn)元車(chē)路云一體化城市交通融合感知項(xiàng)目
- 中原證券擬實(shí)施2025年半年度權(quán)益分派,共計(jì)派發(fā)現(xiàn)金紅利3714.31萬(wàn)元-當(dāng)前熱議
- 每日視點(diǎn)!主場(chǎng)戰(zhàn)三鎮(zhèn)賽前,大連英博為隊(duì)史首位外援羅伯森舉辦退役儀式
- 祥生醫(yī)療前三季度營(yíng)業(yè)收入3.43億元,同比下降5.27%
- 江蘇最低工資標(biāo)準(zhǔn)公布
- 首佳科技于10月17日耗資56萬(wàn)港元回購(gòu)70萬(wàn)股-每日消息
- 靳東:延安的變化讓人刮目相看_焦點(diǎn)簡(jiǎn)訊
- 當(dāng)前關(guān)注:凡人微光|這座城的精神,正年輕!
- 又見(jiàn)中小銀行密集調(diào)降存款利率-簡(jiǎn)訊
- 前沿?zé)狳c(diǎn):思源電氣前三季度凈利21.91億元,同比增長(zhǎng)46.94%
- 今日快看!劉浩存談藝術(shù)的生命力
- 要聞:呂瑞浩公參會(huì)見(jiàn)上海市疾控局團(tuán)組
- 光庭信息:2025年前三季度凈利潤(rùn)4477.54萬(wàn)元 同比增長(zhǎng)308.53%_最新資訊
- 拿起手機(jī)就能免費(fèi)聽(tīng)講座、看展覽 “十四五”期間多彩文化點(diǎn)亮生活
- 1 醫(yī)藥久違大漲!何時(shí)能走出底部?
- 2 基金銷(xiāo)售轉(zhuǎn)型:從“硬營(yíng)銷(xiāo)”到“軟輸出”
- 3 人民幣資產(chǎn)大反攻!后市怎么看?9月策略觀點(diǎn)看這里
- 4 不流于花式陪伴 基金投教探尋進(jìn)階之路
- 5 市場(chǎng)反彈別瞎忙!關(guān)注這5只基金
- 6 “藝起迎亞運(yùn)、亞殘運(yùn)”仁美書(shū)畫(huà)名家邀請(qǐng)展活動(dòng)成功舉辦
- 7 王蕾:手?jǐn)埿窃拢瑸椤罢垡硖焓埂睋纹鹨黄{(lán)天
- 8 第一!鄒城市“99公益日”網(wǎng)絡(luò)募捐工作取得歷史性突破!
- 9 天舟五號(hào)貨運(yùn)飛船已受控再入大氣層
- 10 這些水果果皮比果肉營(yíng)養(yǎng)還高,5種健康吃法快收藏





