老司机91精品网站在线观看_久久69精品久久久久久hb_成人欧美在线观看_免费一级日本c片完整版

首頁>消費 > 正文

環(huán)球資訊:個人博客留言板功能實現(xiàn)

2023-06-10 13:59:02    出處:博客園

ZY知識庫留言板功能實現(xiàn)

前言

因為這個博客是用的大佬的開源項目,我也是用自己的想法改了很多東西,雖然可能寫的不是很好,但是我自己想要的效果實現(xiàn)了,開源項目不就是用來學(xué)習(xí)的嘛,所以不能一層不變,之前首頁改版、評論功能我都沒有寫文章,這次抽空更新了留言板功能,來水一篇文章。


(資料圖片)

留言板地址:ZY知識庫 · ZY - 留言板 (pljzy.top)

留言類和回復(fù)類

首先我創(chuàng)建了如下2個類,類型無非就是int、string、DateTime,這里就不做多的解釋了

留言類

字段名解釋
Id主鍵
Name留言者昵稱
Email留言者郵箱
Message留言內(nèi)容
Created留言時間

回復(fù)類

字段名解釋
Id主鍵
MessageId留言類外鍵
Name回復(fù)者昵稱
Email回復(fù)者郵箱
Reply回復(fù)內(nèi)容
Created留言時間

Service層實現(xiàn)

然后我創(chuàng)建了IMessagesService接口類,列舉部分如下:

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

然后用MessagesService類實現(xiàn)這個接口類:

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富文本編輯器傳過來的內(nèi)容,這里就不做解釋了。

配置文件依賴注入

builder.Services.AddTransient();

Controller層實現(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 = "請輸入留言內(nèi)容",Message = "請輸入留言內(nèi)容",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 = "服務(wù)器異常!", Message = "服務(wù)器異常!", StatusCode = 500 };        }    }}

因為是MVC項目所以控制器繼承Controller類,然后后臺管理的接口則是繼承ControllerBase用于實現(xiàn)Restful風(fēng)格接口。

前端部分實現(xiàn)

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

分布視圖MsgBoxList用于顯示留言

分布視圖MsgBoxReplyList用于顯示該留言是否有人回復(fù)

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請求發(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("請求過于頻繁,請稍后再試。","warning")                }else if (xhr.status === 422){                    alert(xhr.responseJSON.message,"warning")                 }                else{                    alert("服務(wù)器異常,請稍后再試?。?!","danger")                }            } })

留言板效果圖

結(jié)尾

上述內(nèi)容就是對留言板功能的大體實現(xiàn),總的來說,這是一個留言板的簡單實現(xiàn)。

關(guān)鍵詞:

相關(guān)內(nèi)容

消費
產(chǎn)業(yè)
強者恒強,江鈴福特全順何以持續(xù)領(lǐng)跑輕客市場? 如果想購買一輛輕客車型,俯瞰全球汽車市場,相信江鈴福特全順定會成為多數(shù)人的首選,
我們的鄉(xiāng)村一如既往的平靜 太陽攀上東邊山包,山嶺上輕紗一樣彌漫的稀薄霧氣化作水汽,將東山清洗了一遍,披上太
還在為輔導(dǎo)孩子學(xué)習(xí)發(fā)愁?一臺科大訊飛AI學(xué)習(xí)機T10就夠了 每一個新學(xué)期的開始,家長都會操碎了心,從準(zhǔn)備新的文具到接送上下學(xué),再到輔導(dǎo)課后學(xué)
新品亮相,方案升級,吉之美上海雙展完美收官,載譽滿滿! 5月29日至6月7日,好戲連臺,2023上海國際酒店及餐飲業(yè)博覽會和第十五屆上海國際水展
基金
老司机91精品网站在线观看_久久69精品久久久久久hb_成人欧美在线观看_免费一级日本c片完整版

      日韩欧美国产综合| 最新日韩av在线| 亚洲综合在线观看视频| 精品在线你懂的| 国产亚洲成年网址在线观看| 一区二区三区日韩精品视频| 欧美一区二区久久久| 亚洲六月丁香色婷婷综合久久| 久久精品国产亚洲一区二区三区| 久久精品一区二区三区四区| 午夜久久久影院| 久久久久久久久一| 日本亚洲欧美天堂免费| 久久精品人人做人人综合 | 成人精品小蝌蚪| 一区二区三区免费在线观看| 欧美成人一区二区三区片免费 | 亚洲国产精品久久人人爱蜜臀 | 欧美久久久久免费| 亚洲免费资源在线播放| 国产成人免费高清| 玉米视频成人免费看| 欧美成人激情免费网| 天天影视涩香欲综合网| 国产欧美日韩视频一区二区| 欧美日韩精品一区二区三区四区 | 精品福利一二区| 视频一区免费在线观看| 国产日韩影视精品| 欧美日韩高清在线播放| 一区二区三区高清不卡| 97精品久久久久中文字幕| 色88888久久久久久影院野外| 国产人久久人人人人爽| 精品一区二区精品| 亚洲一区二区三区四区在线| 久久久久99精品一区| 久久国产剧场电影| 亚洲欧美日韩电影| 国产亚洲欧美一区在线观看| 国产主播一区二区| 亚洲一区二区三区中文字幕| 国产精品狼人久久影院观看方式| 国产精品一区不卡| 天天操天天色综合| 亚洲美女屁股眼交| 91蜜桃网址入口| 91.com视频| 日本在线不卡视频一二三区| 日韩一区在线免费观看| 精品国产乱码久久| 国产在线精品国自产拍免费| 亚洲一级二级在线| 成人欧美一区二区三区视频网页 | 国产在线国偷精品免费看| 亚洲一区在线观看免费观看电影高清| 国产欧美日韩麻豆91| 国产电影一区在线| 在线精品视频免费播放| 亚洲午夜羞羞片| 国产精品久久久一区麻豆最新章节| 日韩免费高清视频| 国产一区二区主播在线| 91久久国产最好的精华液| 亚洲伦在线观看| 中文字幕+乱码+中文字幕一区| 精品国产一区a| 国产成人免费在线视频| 欧美丝袜第三区| 青青草成人在线观看| 亚洲一二三区视频在线观看| 亚洲精品国产成人久久av盗摄| 国产视频一区二区三区在线观看| 精品日韩成人av| 成人一区二区三区视频在线观看 | 日韩极品在线观看| 一区二区三区日韩精品| 曰韩精品一区二区| 中文字幕精品—区二区四季| 国产亚洲1区2区3区| 99精品视频在线观看| 欧美成人猛片aaaaaaa| 国产成人免费9x9x人网站视频| 欧美视频在线一区二区三区| 美美哒免费高清在线观看视频一区二区| 亚洲一区二区在线免费观看视频 | 欧美日韩在线综合| 久久精品久久99精品久久| 色伊人久久综合中文字幕| 日韩精品一二三| 色8久久人人97超碰香蕉987| 免费在线成人网| 色天天综合久久久久综合片| 日本欧美在线观看| 色老汉av一区二区三区| 青草av.久久免费一区| 日本福利一区二区| 看电影不卡的网站| 欧美日韩视频在线一区二区| 狠狠色丁香九九婷婷综合五月| 欧美视频完全免费看| 国内欧美视频一区二区| 欧美精品丝袜久久久中文字幕| 国产在线精品一区在线观看麻豆| 欧美喷潮久久久xxxxx| 国产美女精品人人做人人爽| 欧美一区永久视频免费观看| 丰满亚洲少妇av| 久久亚洲精品国产精品紫薇| 久久久精品欧美丰满| 18成人在线观看| 亚洲美女少妇撒尿| 日韩黄色一级片| 欧美三级乱人伦电影| 国产成人aaaa| 久久亚洲一级片| 国产精品沙发午睡系列990531| 亚洲天堂2016| 亚洲国产综合人成综合网站| 奇米777欧美一区二区| 欧美夫妻性生活| www.视频一区| 国产精品女人毛片| 亚洲精品视频一区| 日本欧洲一区二区| 欧美一区欧美二区| 久久品道一品道久久精品| 中文字幕一区二区三区四区不卡| 亚洲色图.com| 日韩精品色哟哟| 欧美卡1卡2卡| 26uuu色噜噜精品一区二区| 国产精品毛片久久久久久| 亚洲精品日韩综合观看成人91| 视频一区在线视频| 欧美一卡2卡三卡4卡5免费| 久久综合网色—综合色88| 亚洲视频你懂的| 一本色道亚洲精品aⅴ| 国产91对白在线观看九色| 国产人伦精品一区二区| 一区二区三区四区中文字幕| 精品无码三级在线观看视频| 欧美va亚洲va在线观看蝴蝶网| 国产农村妇女精品| 午夜免费久久看| 日韩视频在线永久播放| 日本一区二区三区dvd视频在线 | 成人福利在线看| 国产精品久久久久永久免费观看 | 国产视频一区不卡| 一区二区三区在线免费观看 | 国产精品女主播在线观看| 亚洲国产精品嫩草影院| 欧美综合天天夜夜久久| 97久久人人超碰| 亚洲九九爱视频| 欧美日韩精品高清| 国产亚洲综合色| 五月天激情综合网| 91精品国产一区二区| 国产精品网曝门| 美女在线视频一区| 久久久久久久网| 亚洲va韩国va欧美va精品| 国产91精品一区二区| 亚洲欧美视频在线观看| 欧美视频一区二区在线观看| 国产欧美精品一区二区色综合| 欧美狂野另类xxxxoooo| 国产精品国产a| 黄色小说综合网站| 中文字幕一区二区在线播放| 欧美午夜精品一区二区三区| 欧美激情一区二区三区蜜桃视频| 日韩黄色一级片| 国产片一区二区| 在线观看一区二区精品视频| 久久久久久9999| 免费精品视频在线| 国产精品丝袜一区| 欧美亚洲精品一区| 中文字幕精品综合| 久久成人免费电影| 中文字幕亚洲精品在线观看| 欧美日韩一区二区三区在线看| 国产精品全国免费观看高清| 极品尤物av久久免费看| 亚洲人成伊人成综合网小说| 3d动漫精品啪啪| 一区二区三区 在线观看视频 | 久久久久久久久蜜桃| 色94色欧美sute亚洲13| 中文字幕不卡在线观看| 国产精品综合久久| 一区二区三区免费| 26uuu久久天堂性欧美| 偷拍与自拍一区| 中文字幕二三区不卡| 国产精品18久久久久久久网站|