在线免费av资源-电影天堂国产精品-www.神马久久-精品国产aⅴ-亚洲欧美色图-www.色在线

世界快資訊:個人博客留言板功能實現

來源:博客園     時間:2023-06-11 00:34:43

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")                }            } })

留言板效果圖

結尾

上述內容就是對留言板功能的大體實現,總的來說,這是一個留言板的簡單實現。

標簽:

精彩放送
久久99国产精品久久99大师| 日韩成人一区二区三区在线观看| 欧美日韩视频免费观看| 久久国产人妖系列| 亚洲人成网站77777在线观看| 精品国产一区二区三区不卡蜜臂 | 日韩亚洲一区在线| 亚洲午夜精品一区 二区 三区| 国产成人夜色高潮福利影视| 亚洲欧美成人| 日韩精品乱码av一区二区| 亚洲精品a区| 色999日韩| 久久99国产精一区二区三区| 欧美 日韩 国产一区二区在线视频| zzzwww在线看片免费| 91久久青草| 黑丝美女一区二区| 日韩黄色在线| 群体交乱之放荡娇妻一区二区| 国产精品毛片久久| 国产中文欧美日韩在线| 婷婷亚洲图片| 日本在线播放一区二区三区| 久久久亚洲人| 精品丝袜在线| 精品亚洲成人| 天堂久久一区| 久久久天天操| 国产精品伊人| 欧美wwwwww| 久久精品97| 激情欧美丁香| 国产精品sm| 日韩午夜在线| 电影一区二区三区久久免费观看| 亚洲经典自拍| 99视频这里有精品| 亚洲专区免费| 日韩欧美ww| 国产免费拔擦拔擦8x在线播放| 欧美猛男男男激情videos| 亚洲一区不卡| 亚洲人成精品久久久 | 亚洲四虎影院| 久久精品国产99久久| 免费在线播放第一区高清av| 亚洲网站在线| 国语对白精品一区二区| 国产模特精品视频久久久久| 国产一区99| 亚洲欧洲自拍| 欧美在线导航| 亚洲色图88| 91精品综合久久久久久久久久久| 精品999日本久久久影院| 日韩高清在线| 精品欧美久久| 少妇一区二区视频| 另类中文字幕国产精品| 性xxxx欧美老肥妇牲乱| 国产欧美欧美| 日本另类视频| 午夜国产欧美理论在线播放| 亚洲精品亚洲人成在线| 中文在线а√天堂| 美女毛片一区二区三区四区| 欧美经典一区| 日韩av中字| 亚洲黄色在线| 成人18夜夜网深夜福利网| 美日韩一级片在线观看| 国产精品嫩草99av在线| 大伊香蕉精品在线品播放| 欧美一级一区| 国产精品久久久久久麻豆一区软件| 欧美五码在线| 国产精品视频一区二区三区综合| 伊人久久视频| 午夜激情久久| 7777精品| www.久久热| 岛国精品在线| 91亚洲成人| 激情久久一区| 亚洲成人黄色| 国产欧美69| 日韩高清中文字幕一区| 国产精品粉嫩| 国产亚洲毛片在线| 久久精品亚洲成在人线av网址| www.91精品| 日本在线不卡视频| 日韩在线理论| 蜜芽一区二区三区| 亚洲女同中文字幕| 精品视频日韩| 久久伊人影院| 国产欧美日韩| 亚洲欧美综合久久久| 日日夜夜精品| 91精品影视| 日韩av在线中文字幕| 99在线热播精品免费99热| 99国产**精品****| 久久精品凹凸全集| 欧美视频在线观看| 精品视频成人| 亚州综合一区| 亚洲欧美专区| 亚洲另类黄色| 久久精品一区二区三区中文字幕| 日韩精品专区| 日韩美女一区二区三区在线观看| 视频一区欧美日韩| 免费欧美日韩| 亚洲女人av| 久久不射2019中文字幕| 亚洲综合另类| 男人天堂欧美日韩| 亚洲综合电影一区二区三区| 国产视频亚洲| 免费观看日韩av| 日韩制服丝袜av| 男女视频一区二区| 四虎成人av| 日韩欧美国产精品综合嫩v| 黄色在线观看www| 日本在线啊啊| 不卡亚洲精品| 久热成人在线视频| 麻豆91在线看| 影音先锋日韩精品| 国产中文精品久高清在线不| 五月综合久久| 999久久精品| 91精品久久久久久久久久不卡| 99热在线成人| 91久久在线| 视频一区二区三区中文字幕| 国产精品久久久久久麻豆一区软件 | 中文字幕日韩亚洲| 国产精一区二区| 日韩成人一区二区三区在线观看| av自拍一区| 美女少妇全过程你懂的久久| 欧美日韩国产欧| 欧美一级专区| 亚洲小少妇裸体bbw| 亚洲国产高清视频| 最新国产精品| 日韩美脚连裤袜丝袜在线| 99re91这里只有精品 | 久久精品一区| 国产在线日韩精品| 久久精品国产亚洲5555| 羞羞答答成人影院www| 三级欧美在线一区| 国产一区二区主播在线| 亚洲三级网站| 久久免费福利| 天天影视欧美综合在线观看| 天堂成人国产精品一区| 欧美中文字幕精在线不卡| 麻豆91小视频| 日韩伦理一区二区三区| 亚洲五月婷婷| 中文字幕这里只有精品| 亚洲久久成人| 精品国产91久久久久久浪潮蜜月| 伊人天天综合| 亚洲精品大全| 欧美极品中文字幕| 宅男在线一区| 免费观看亚洲| 99re8精品视频在线观看| 精品不卡一区| 日本精品三区| 欧美日韩ab| 加勒比色老久久爱综合网| 免费视频最近日韩| 日韩国产成人精品| 高清欧美性猛交xxxx黑人猛| 性欧美xxxx大乳国产app| 久久精品国产99国产| 日韩免费一级| 在线亚洲欧美| 欧美亚洲三区| 果冻天美麻豆一区二区国产| 先锋亚洲精品| 日本sm残虐另类| 青青草国产免费一区二区下载| 免费中文字幕日韩欧美| 日韩高清在线观看| 成人午夜国产| 精品人人视频| 丁香5月婷婷久久| 色综合蜜月久久综合网| 久久悠悠精品综合网| 久久国产综合|