国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

個人博客留言板功能實現(xiàn)

這篇具有很好參考價值的文章主要介紹了個人博客留言板功能實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

前言

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

留言板地址: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<msg> SubmitMessageAsync(msg messages);
    //查詢所有留言,分頁列表
    IPagedList<msg> GetAll(QueryParameters param);
}

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

public class MessagesService:IMessagesService
{
    private readonly MyDbContext _myDbContext;

    public MessagesService(MyDbContext myDbContext)
    {
        _myDbContext = myDbContext;
    }
    public async Task<Messages> 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<Messages> 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富文本編輯器傳過來的內(nèi)容,這里就不做解釋了。

配置文件依賴注入

builder.Services.AddTransient<IMessagesService, MessagesService>();

Controller層實現(xiàn)

public class MsgBoardController : Controller
{
    private readonly IMessagesService _messagesService;

    public MsgBoardController(IMessagesService messagesService)
    {
        _messagesService = messagesService;
    }
    // GET
    public async Task<IActionResult> Index(int page = 1, int pageSize = 10)
    {
        MsgBoardList msgBoardList = new MsgBoardList()
        {
            PagedList = _messagesService.GetAll(new QueryParameters
            {
                Page = page,
                PageSize = pageSize
            }),
            ...
        };
        return View(msgBoardList);
    }

    /// <summary>
    /// 新增留言
    /// </summary>
    /// <param name="messages"></param>
    /// <returns></returns>
    [HttpPost]
    public async Task<ApiResponse> 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風格接口。

前端部分實現(xiàn)

 <div class="my-3" id = "CommentList">
            <div class="feedback_area_title">
                留言列表
            </div>
            @foreach (var m in Model.PagedList)
            {
                @await Html.PartialAsync("Widgets/MsgBoxList",m)
            }
</div>

分布視圖MsgBoxList用于顯示留言

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

MsgBoxList

@model Personalblog.Model.Entitys.Messages
<div class="feedbackItem">
    <div class="feedbackListSubtitle">
        <div class="feedbackManage">
            <span class="comment_actions">
                <a class="comment_actions_link" href="#reply" onclick="Reply(@Model.Id,'@Model.Name')" id="Reply">回復(fù)</a>
            </span>
        </div>
        <span class="comment_date">@Model.created_at</span>
        <span class="a_comment_author_5166961">@Model.Name</span>
    </div>
    <div class="feedbackCon">
        @Html.Raw(@Model.Message)
    </div>   
</div>
@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')
                }
            }
 })

留言板效果圖

個人博客留言板功能實現(xiàn)

結(jié)尾

上述內(nèi)容就是對留言板功能的大體實現(xiàn),總的來說,這是一個留言板的簡單實現(xiàn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-477819.html

到了這里,關(guān)于個人博客留言板功能實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包