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

同样我这里使用的还是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="@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="@config.SUB_ID">@config.SUB_NM</option>
continue;
}
<option value="@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="@categ.CatelogID">@categ.CatelogName</option>
continue;
}
<option value="@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="提交"/>
</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="@categ.CatelogID">@categ.CatelogName</option>
continue;
}
<option value="@categ.CatelogID">@categ.CatelogName</option>
}

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

04-dotnetCore博客后台基本功能实现的更多相关文章

  1. 使用react全家桶制作博客后台管理系统

    前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-r ...

  2. Python开发【项目】:博客后台

    概述 通过自己写的博客后台代码.思路,来与武sir的代码进行一个差异化的比较,记录之间的差距,改善以后写代码的思路 博客后台这个项目,对之前Django学习的各个知识点都有涉及到,非常重要 用户登录验 ...

  3. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  4. Vue实战狗尾草博客后台管理系统第七章

    Vue实战狗尾草博客后台管理平台第七章 本章内容为借助模块化来阐述Vuex的进阶使用. 在复杂项目的架构中,对于数据的处理是一个非常头疼的问题.处理不当,不仅对维护增加相当的工作负担,也给开发增加巨大 ...

  5. Vue实战狗尾草博客后台管理系统第三章

    Vue实现狗尾草博客后台管理系统第三章 本章节,咱们开发管理系统侧边栏及面包屑功能. 先上一张效果图 样式呢,作者前端初审,关于设计上毫无美感可言,大家可根据自己情况设计更好看的哦~ 侧边栏 这里我们 ...

  6. 博客后台迁移至i.cnblogs.com及小经验分享

    大家好!我们已经将博客后台从原来的 www.cnblogs.com/博客地址名/admin/ 迁移至独立的二级域名 i.cnblogs.com.如果您发现任何问题,麻烦您立即向我们反馈. 虽然这次迁移 ...

  7. 公告:CSDN博客频道新功能正式上线!

    各位尊敬的CSDN用户: 你们好! 为了更好的服务于用户,CSDN博客最新推出如下功能: 1.取消开通博客3天才能发布博文的限制,博客开通之后即可发表博文 2.博客文章增加自定义摘要功能    在发表 ...

  8. 云计算之路-阿里云上:14:20-14:55博客后台2台服务器都CPU 100%引发的故障

    非常抱歉,今天下午14:20-14:55期间,由于同一个负载均衡中的2台服务器都出现CPU 100%问题,造成博客后台无法正常访问,由此给您带来了很大很大的麻烦,请您谅解. 博客后台是CPU消耗很低的 ...

  9. hexo next主题为博客添加分享功能

    title: hexo next主题为博客添加分享功能 date: 2018-01-06 20:20:02 tags: [hexo博客, 博客配置] categories: hexo next主题配置 ...

随机推荐

  1. Java FAQ -- "Exception in thread 'main' java.lang.UnsupportedClassVersionError:"

    OS:Ubuntu 最近重新学习Java,写了一段很小的程序,如下: public class Hello{ public static void main(String args[]){ Syste ...

  2. VMware虚拟机NAT模式的具体配置

      NAT模式的具体配置 NAT方式:虚拟机可以上外网,可以访问宿主计算机所在网络的其他计算机(反之不行). 1.1.1.        查看虚拟机的网络参数 1)      打开虚拟机,选择菜单&q ...

  3. iOS 统计项目代码行数

    最近去面试 对面的"他" 问我其中一个问题 是 "你的项目代码量是多少?" 当时的确有点蒙圈, 我可以从整个项目打包的角度考虑项目大小,我还真没想过到底我的项目 ...

  4. Architecture Patterns

    This chapter provides guidelines for using architecture patterns. Introduction Patterns for system a ...

  5.  Link 

    GNU/Linux, Bash, C, PHP, Perl, JavaScript, Vim, Git http://blog.sanctum.geek.nz/about   中文數學詞典 http: ...

  6. matlab fread

    Matlab中fread函数用法    “fread”以二进制形式,从文件读出数据. 语法1:[a,count]=fread(fid,size,precision) 语法2:[a,count]=fre ...

  7. Linux CentOS7安装Mysql5.7

    一.下载mysql mkdir /home/install #创建install目录 在/home/install目录下下载mysql5.7 wget https://cdn.mysql.com//D ...

  8. PHP 数字转大写

    <?php header("content-type:text/html;charset=utf-8"); function numToRmb($num){ $rmbNum ...

  9. 树莓派使用DHT11温湿度传感器(C语言)

    硬件: 树莓派 2.0 DHT模块  接树莓派5V GND GPIO1 功能:读取传感器数据并打印出来 // //mydht11.c // #include <wiringPi.h> #i ...

  10. AngularJS 视图和路由

    在AngularJS之后引用angular-route  路由   ngRoute模块加载声明   AngularJS提供的when和otherwise两个方法来定义应用的路由   otherwise ...