首页 > 代码库 > 04-dotnetCore博客后台基本功能实现

04-dotnetCore博客后台基本功能实现

  今天继续上篇博客的内容,在上一篇的时候,已经基本实现了博客列表内容的显示,继续进行添加、编辑、删除等功能。添加和编辑界面共用一个界面,添加界面如图所示:

技术分享

同样我这里使用的还是layui里面的表单内容,直接拷贝这个界面:

技术分享

把没必要的内容删除再稍作修改,直接贴修改后的代码,里面也包含了所有内容:

 

@model DayaliBlog.Model.Blog.T_BLOG_CONTENT
<blockquote class="layui-elem-quote">添加博客</blockquote>
<form class="layui-form" method="post" action="">
    <div class="layui-form-item">
        <label class="layui-form-label">标题</label>
        <div class="layui-input-block">
            @Html.TextBoxFor(a=>a.BlogTitle,new { placeholder = "请输入标题", @class="layui-input"})
        </div>
    </div>
    <input type="hidden" value="http://www.mamicode.com/@Model.BlogID" name="BlogID"/>
    <div class="layui-form-item">
        <label class="layui-form-label">博客类型</label>
        <div class="layui-input-block">
            <select name="BlogType" lay-verify="required">
                @foreach (DayaliBlog.Model.Sys.T_SYS_CONFIG config in ViewBag.BlogTypes)
                {
                    if (config.SUB_ID == Model.BlogType)
                    {
                        <option selected="selected" value="http://www.mamicode.com/@config.SUB_ID">@config.SUB_NM</option>
                        continue;
                    }
                    <option value="http://www.mamicode.com/@config.SUB_ID">@config.SUB_NM</option>
                }
            </select>
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">所属分类</label>
        <div class="layui-input-block">
            <select name="CatelogID" lay-verify="required">
                @foreach (DayaliBlog.Model.Blog.T_BLOG_CATELOG categ in ViewBag.CategList)
                {
                    if (categ.CatelogID == Model.CatelogID)
                    {
                        <option selected="selected" value="http://www.mamicode.com/@categ.CatelogID">@categ.CatelogName</option>
                        continue;
                    }
                    <option value="http://www.mamicode.com/@categ.CatelogID">@categ.CatelogName</option>
                }
            </select>
        </div>
    </div>
    <div class="layui-form-item layui-form-text">
        <label class="layui-form-label">内容</label>
        <div class="layui-input-block">
            @Html.TextAreaFor(a=>a.BlogContent,new{ placeholder = "请输入内容" ,@class="layui-textarea"})
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">备注</label>
        <div class="layui-input-block">
            @Html.TextBoxFor(a=>a.Remark,new{ placeholder = "请输入备注", @class = "layui-input"})
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <input class="layui-btn" style="max-width: 100px" lay-submit lay-filter="formDemo" type="submit" value="http://www.mamicode.com/提交"/>
        </div>
    </div>
</form>

还是使用的是MVC的模式进行绑定数据,不多说了,其中form表单我们采用的是post提交方式,另外最后的提交按钮我已将layui中按钮进行替换了,type="submit",再去完成我们相关的控制器,Index,Add,Del三个Action方法的实现,回到BlogController控制器,还是少说废话,直接贴代码:

 

 

using System;
using DayaliBlog.Model.Blog;
using DayaliBlog.Service.Blog;
using DayaliBlog.Service.Sys;
using Microsoft.AspNetCore.Mvc;

namespace DayaliBlog.Web.Areas.Admin.Controllers
{
    [Area("Admin")]
    public class BlogController : Controller
    {
        BlogCategService _categService=new BlogCategService();
        BlogContentService _contentService=new BlogContentService();
        BlogCategRelService _relCateg=new BlogCategRelService();
        public IActionResult Index()
        {
            var list = _contentService.GetList("");
            return View(list);
        }

        public IActionResult Add(int? id)
        {
            ViewBag.BlogTypes = SysConfig.GetConfigList(SysConfig.BlogType);
            ViewBag.CategList = _categService.GetList("");
            T_BLOG_CONTENT content =new T_BLOG_CONTENT();
            if (id != null)
            {
                content = _contentService.GetModel(" b.BlogID=" + id.Value);
            }
            return View(content);
        }

        [HttpPost]
        public IActionResult Add(T_BLOG_CONTENT content)
        {
            int blogId = 0;
            if (content.BlogID == 0)
            {
                content.CreateTIme = DateTime.Now;
                content.CreateUser = 1;
                content.LastUptTime = DateTime.Now;
                content.BlogState = 1;
                 blogId= _contentService.Insert(content);
            }
            else
            {
                blogId = content.BlogID;
                content.UpdateUser = 1;
                content.LastUptTime = DateTime.Now;
                content.BlogState = 1;
                bool isSuccess=_contentService.Update(content);
                if (isSuccess)
                    _relCateg.Delete(content.BlogID);
            }
            if (blogId > 0)
                _relCateg.Insert(blogId, content.CatelogID);
            return Redirect("/Admin/Blog/Index");
        }

        public IActionResult Del(int id)
        {
            _relCateg.Delete(id);
            _contentService.Delete(id);
            return Redirect("/Admin/Blog/Index");
        }
    }
}

几个比较特殊的地方,一个是Add(int? id),因为添加和编辑是同一个界面,当点击添加的时候,传值Id为null,当编辑时传的是BlogID ,以此作为是要插入还是编辑的区分。同样的Add(Model) 方法里面,也是以id为标识,[HttpPost]标识这个Action只能为Post所调用,插入或修改完成后直接返回到首页,return Redirect("/Admin/Blog/Index");

 

ViewBag.BlogTypes 加载博客类型,ViewBag.CategList 加载所属分类,在前台便利List集合加载下拉框:

 

@foreach (DayaliBlog.Model.Blog.T_BLOG_CATELOG categ in ViewBag.CategList)
                {
                    if (categ.CatelogID == Model.CatelogID)
                    {
                        <option selected="selected" value="http://www.mamicode.com/@categ.CatelogID">@categ.CatelogName</option>
                        continue;
                    }
                    <option value="http://www.mamicode.com/@categ.CatelogID">@categ.CatelogName</option>
                }

判断编辑时,当前博客的类型或者分类,将selected属性设置为选中。我的源码地址:DayaliBlogDemo。分类管理在博客中不作说明了,大家可以直接看源码,后台代码写的有点乱糟糟,凑合看吧。



04-dotnetCore博客后台基本功能实现