abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六)
abp(net core)+easyui+efcore实现仓储管理系统目录
abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一)
abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二)
abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三)
abp(net core)+easyui+efcore实现仓储管理系统——定义仓储并实现 (四)
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: /<controller>/
public IActionResult Index()
{
var output = _moduleAppService.GetAllAsync();
var model = new EditModuleModalViewModel
{
Module = AutoMapper.Mapper.Map<CreateUpdateModuleDto>(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<CreateUpdateModuleDto>(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<CreateUpdateModuleDto>(module)
};
return View(model);
}
// POST: Cargoes/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
try
{
await _moduleAppService.DeleteAsync(id);
}
catch (Exception ex)
{
return View(ex.Message);
//throw;
}
return RedirectToAction(nameof(Index));
}
}
}
相关文章
- 金融App面临安全风险?解锁HMS Core安全检测服务解决方案
- CodeArts TestPlan:一站式测试管理平台
- cookie、session,、token,还在傻傻分不清?
- 一文了解华为FusionInsight MRS HBase的集群隔离方案RSGroup
- 高并发环境下构建缓存服务,你需要注意这6点
- 一文详解RocketMQ的存储模型
- Serverless时代的微服务开发指南:华为云提出七大实践新标准
- 用100W+行代码贡献经验,带你了解如何参与OpenHarmony开源
- CSV:简单格式下隐藏的那些坑
- 能将三次握手讲到这个程度,不给你offer给谁!
- 细数华为云云原生产品及五大开源实践
- 解密秒杀系统架构:不是所有的秒杀都是秒杀
- 《迷你世界》亿级玩家都在用的游戏场景推荐系统长啥样?
- ROMA Connect: 5大联接能力+4大集成能力,推进企业数字化转型
- DTT年度收官圆桌π,华为云8位技术专家的年末盘点
- 工业数据分析为什么要用FusionInsight MRS IoTDB?
- 云网络运维必备神器:全链路故障诊断与分析
- 掌握这5大功能,解锁鲲鹏开发新发现
- 华为云助推武水集团项目成功入选住建部“智慧水务”典型案例!
- 数字化时代,校园生活还可以这样过