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="@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博客后台基本功能实现的更多相关文章
- 使用react全家桶制作博客后台管理系统
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-r ...
- Python开发【项目】:博客后台
概述 通过自己写的博客后台代码.思路,来与武sir的代码进行一个差异化的比较,记录之间的差距,改善以后写代码的思路 博客后台这个项目,对之前Django学习的各个知识点都有涉及到,非常重要 用户登录验 ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- Vue实战狗尾草博客后台管理系统第七章
Vue实战狗尾草博客后台管理平台第七章 本章内容为借助模块化来阐述Vuex的进阶使用. 在复杂项目的架构中,对于数据的处理是一个非常头疼的问题.处理不当,不仅对维护增加相当的工作负担,也给开发增加巨大 ...
- Vue实战狗尾草博客后台管理系统第三章
Vue实现狗尾草博客后台管理系统第三章 本章节,咱们开发管理系统侧边栏及面包屑功能. 先上一张效果图 样式呢,作者前端初审,关于设计上毫无美感可言,大家可根据自己情况设计更好看的哦~ 侧边栏 这里我们 ...
- 博客后台迁移至i.cnblogs.com及小经验分享
大家好!我们已经将博客后台从原来的 www.cnblogs.com/博客地址名/admin/ 迁移至独立的二级域名 i.cnblogs.com.如果您发现任何问题,麻烦您立即向我们反馈. 虽然这次迁移 ...
- 公告:CSDN博客频道新功能正式上线!
各位尊敬的CSDN用户: 你们好! 为了更好的服务于用户,CSDN博客最新推出如下功能: 1.取消开通博客3天才能发布博文的限制,博客开通之后即可发表博文 2.博客文章增加自定义摘要功能 在发表 ...
- 云计算之路-阿里云上:14:20-14:55博客后台2台服务器都CPU 100%引发的故障
非常抱歉,今天下午14:20-14:55期间,由于同一个负载均衡中的2台服务器都出现CPU 100%问题,造成博客后台无法正常访问,由此给您带来了很大很大的麻烦,请您谅解. 博客后台是CPU消耗很低的 ...
- hexo next主题为博客添加分享功能
title: hexo next主题为博客添加分享功能 date: 2018-01-06 20:20:02 tags: [hexo博客, 博客配置] categories: hexo next主题配置 ...
随机推荐
- JavaScript深入理解sort()方法
一. 基本用法 let arr1 = [3, 5, 7, 1, 8, 7, 10, 20, 19] console.log(arr1.sort()) // [1, 10, 19, 20, 3, 5, ...
- ASP-DateAdd时间增加
ASP内置函数DateAdd(interval, number, date) 1.interval标识你要加的日期部分,具体参数如下:yyyy → 年m → 月d → 日h → 小时n → 分钟s → ...
- SpringBoot处理url中的参数的注解
1.介绍几种如何处理url中的参数的注解 @PathVaribale 获取url中的数据 @RequestParam 获取请求参数的值 @GetMapping 组合注解,是 @RequestMa ...
- python的标准类型分类
数据属性 储存模型 更新模型 访问模型 数字 标量/原子类型 不可变类型 直接存取 字符串 标量/原子类型 不可变类型 顺序 列表 容器 可变类型 顺序 元组 容器 不可变类型 顺序 字典 容器 ...
- 前端之 JS 实现全选、反选、取消选中
需求 制作如下可选表格,实现“全选”.“反选”.“取消”功能 代码示例 <!DOCTYPE html> <html lang="zh-CN"> <he ...
- Python3.6全栈开发实例[011]
11.元素分类有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中.即: {'k ...
- 0402-服务注册与发现-Eureka Server使用、将服务注册到Eureka server上
一.Eureka Server使用 官方文档地址:http://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud. ...
- 高斯过程(GP)
随机过程基本概念: 随机过程是一个比随机变量更广泛的概念.在概率论中,通常研究一个或多个这样有限个数的随机变量,即使在大数定律和中心极限定理中考虑了无穷多个随机变量,但也要假设随机变量之间互相独立.而 ...
- 鸟哥的Linux私房菜-第一部分-第3章主机规划与磁盘分区
1. 选择一个与你的Linux搭配的主机配置 NAT服务器:小型企业或者学校都基本是只有一条对外的线路,网卡 SAMBA服务器:完成Windows网上邻居的功能,网卡和硬盘要求高 Mail服务器:如果 ...
- 1.5 使用电脑测试MC20的发送英文短信功能
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...