-
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六)
通过前面三篇文章的介绍,我们学习了如何创建实体,如何创建数据库操作,如何创建应用服务。在上一文章中我们在应用层实现了对数据库的CURD操作。在本篇文章中,主要是使用常规的MVC方式来实现增删改查的功能,通过完善Controller、View、ViewModel,以及调试修改控制器来实现展示层的增删改查。最终实现效果如下图:
一、创建ModuleController
ABP对ASP.NET Net Core MVC Controllers进行了集成,通过ABP网站创建的项目会自动创建一个Controller基类,这个Controller基类继承自AbpController, 我们即可使用ABP附加给我们的以下强大功能:
本地化
异常处理
对返回的JsonResult进行包装
审计日志
权限认证([AbpMvcAuthorize]特性)
工作单元(默认未开启,通过添加[UnitOfWork]开启)
我们创建的ABP.TPLMS项目,也同样创建了一个控制器基类,具体位置如下图。
1. 在Visual Studio 2017的“解决方案资源管理器”中,右键单击在领域层“ABP.TPLMS.Web.Mvc”项目中的Controller目录。 选择“添加” > “新建项…”。如下图。
2. 在弹出对话框“添加新项-ABP.TPLMS.Web.Mvc”中选择“控制器类”,然后在名称输入框中输入“ModuleController”,然后点击“添加”按钮。如下图。
3.在Visual Studio 2017中打开我们刚才创建ModuleController.cs,并继承自TPLMSControllerBase,并增加列表与修改方法。通过构造函数注入对应用服务的依赖。具体代码如下。
复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Abp.Application.Services.Dto;
using Abp.AspNetCore.Mvc.Authorization;
using Abp.Runtime.Validation;
using ABP.TPLMS.Controllers;
using ABP.TPLMS.Modules;
using ABP.TPLMS.Modules.Dto;
using ABP.TPLMS.Web.Models.Module;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace ABP.TPLMS.Web.Controllers
{
[AbpMvcAuthorize]
public class ModuleController : TPLMSControllerBase
{
// GET: //
public IActionResult Index()
{
var output = _moduleAppService.GetAllAsync();
var model = new EditModuleModalViewModel
{
Module = AutoMapper.Mapper.Map(output.Result.Items.First()),
Modules = output.Result.Items
};
return View(model);
}
private readonly IModuleAppService _moduleAppService;
public ModuleController(IModuleAppService moduleAppService)
{
_moduleAppService = moduleAppService;
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(EditModuleModalViewModel updateDto)
{
if (updateDto == null)
{
return NotFound();
}
if (updateDto.Module == null)
{
return NotFound();
}
_moduleAppService.CreateAsync(updateDto.Module);
return RedirectToAction(nameof(Index));
}
public IActionResult Create()
{
return View();
}
[HttpPost]
[DisableValidation]
public ActionResult Edit(int id,EditModuleModalViewModel updateDto)
{
if (id != updateDto.Module.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
var module= updateDto.Module;
_moduleAppService.UpdateAsync(module);
}
catch (DbUpdateConcurrencyException)
{
if (!DtoExists(updateDto.Module.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(updateDto);
}
private bool DtoExists(long id)
{
return _moduleAppService.GetAllAsync().Result.Items.Any(e => e.Id == id);
}
// GET: Cargoes/Edit/5
public IActionResult Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var module = _moduleAppService.GetAllAsync().Result.Items.SingleOrDefault(m => m.Id == id);
if (module == null)
{
return NotFound();
}
var model = new EditModuleModalViewModel
{
Module = AutoMapper.Mapper.Map(module)
};
return View(model);
//return Ok(cargo.Result);
}
// GET: Cargoes/Delete/5
public IActionResult Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var module = _moduleAppService.GetAllAsync().Result.Items.SingleOrDefault(m => m.Id == id);
if (module == null)
{
return NotFound();
}
var model = new EditModuleModalViewModel
{
Module = AutoMapper.Mapper.Map(module)
};
return View(model);
}
// POST: Cargoes/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task DeleteConfirmed(int id)
{
try
{
await _moduleAppService.DeleteAsync(id);
}
catch (Exception ex)
{
return View(ex.Message);
//throw;
}
return RedirectToAction(nameof(Index));
}
}
}
复制代码
出处:https://www.cnblogs.com/chillsrc/p/11096690.html
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比