结束了天天加班的项目,项目虽然结束,但还是有点小问题,只能在后期优化当中完成了,本次做项目采用了,MVC、Webapi、Entityframework,在园了里看到了有关ABP的介绍,同样ABP也是最新技术集合,就加入了 ABP架构设计交流群 134710707,一起探讨、学习与进步。

  ABP的技术文档全是英文资料,不过现在不用担心了,群里的热心朋友已翻译成能看的懂语言了,详情

  ABP 源代码地址 https://github.com/aspnetboilerplate

  ABP的基本介绍就不讲了它是基于.net 4.5.1的,下载文档后自己了解吧,现在只讲解怎么用了

  公司的项目是基于Easyui的,因此Demo也是基于EasyUI的,ABP的返回值不能满足Easyui的datagrid请求与显示,对Abp源码进行了部分修改,才能正常使用,具体修改会一一列出,给需要的朋友一点帮助。

  ABP的请求值返回的对象属性首字母小写,这是因为默认的Json格式是 CamelCasePropertyNamesContractResolver  ,只要把相关代码修改为

  对应的类名:AbpWebApiModule

private static void InitializeFormatters()
{
GlobalConfiguration.Configuration.Formatters.Clear();
var formatter = new JsonMediaTypeFormatter();
formatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
formatter.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
GlobalConfiguration.Configuration.Formatters.Add(formatter);
GlobalConfiguration.Configuration.Formatters.Add(new PlainTextFormatter());
}

  Easyui的Datagrid请求是通过URL传参数的,目前ABP不支持这种处理方法,因此只能自己在Controller里面写方法了,不能调用自动生成的WebAPi,多了一个步骤,下面是构造的分页类

public EasyUIPager GetPager(HttpRequestBase currentRequest)
{
EasyUIPager pager = new EasyUIPager();
if (currentRequest.Form["page"] != null)
{
pager.CurrentPage = int.Parse(currentRequest.Form["page"]);
}
if (currentRequest.Form["rows"] != null)
{
pager.PageSize = int.Parse(currentRequest.Form["rows"]);
}
pager.SortCloumnName = currentRequest.Form["sort"];
pager.SortOrder = currentRequest.Form["order"];
pager.Filter = currentRequest.Form["filter"];
return pager;
}

JS 请求调用代码

function GridInit() {
//VE.LoodToolbar(); //加载权限
datagrid = $("#datagrid").datagrid({
url: VE.AppPath + '/User/Get',
title: '用户信息',
rownumbers: true,
pagination: true,
iconCls: VE.DatagridIconCls,
height: VE.GridHeight,
pageSize: VE.PageSize,
pageList: VE.PageList,
ctrlSelect:true,
fitColumns: true,
nowrap: false,
border: true,
idField: 'Id',
sortName: 'Id',
sortOrder: 'desc',
columns: [[
{ field: 'ck', checkbox: true },
{ field: 'Id', title: 'Id', width: 80, sortable: true, hidden: true },
{ field: 'UserName', title: '用户名', width: 100, sortable: true },
{ field: 'Surname', title: '姓', width: 60, sortable: true },
{ field: 'Name', title: '名', sortable: true },
{ field: 'EmailAddress', title: '邮箱', sortable: true },
{ field: 'CreationTime', title: '创建时间', width: 140, sortable: true },
{ field: 'CreatorUserName', title: '创建人', width: 100, sortable: true },
{ field: 'LastModifierUserName', title: '最后更新人', width: 100, sortable: true },
{ field: 'LastModificationTime', title: '最后更新时间', width: 140, sortable: true, formatter: VE.FormatterDateTime },
{ field: 'IsActive', title: '状态', width: 45, sortable: true, formatter: VE.FormatterActive }
]],
toolbar: [{
iconCls: 'icon-add',
text: '新增',
handler: function () {
id = 0;
Save()
}
}, '-', {
iconCls: 'icon-edit',
text: '编辑',
handler: function () {
id = VE.Edit("datagrid", VE.GridType_DataGrid)
if (id > 0) {
Save();
}
}
}, '-', {
iconCls: 'icon-busy',
text: '删除',
handler: function () {
Delete();
}
}, '-', {
iconCls: 'icon-unlock',
text: '启用',
handler: function () {
Active(true)
}
}, '-', {
iconCls: 'icon-lock',
text: '禁用',
handler: function () {
Active(false)
}
}]
});
}

MVC Controller代码

#region 获取列表
public JsonResult Get()
{
var provider = new EasyUIProvider();
var pager = provider.GetPager(Request);
var filter = new GetUserInput();
if (!string.IsNullOrEmpty(pager.Filter))
{
filter = provider.DeserializeObject<GetUserInput>(pager.Filter);
}
filter.PageSize = pager.PageSize;
filter.CurrentPage = pager.CurrentPage - ;
filter.SortOrder = pager.SortOrder;
filter.SortCloumnName = pager.SortCloumnName;
var grid = _userApplicationService.GetUser(filter);
return Json(grid);
}
#endregion

效果图如下

关于创建人与最后更新人,ABP的处理比较好,只需要通过映射就可以了,不需要写多余的子查询,具体原理还没查看源代码,等了解后再详解

关于批量操作,一般情况下每页显示20~50条数据,简单的批量删除基本可以满足,如果需操作大量数据建议采用存储过程,修改、添加不在介绍,具体实现请参考源代码

 public async Task Delete(BatchDeleteRequestInput input)
{
for (int i = ; i < input.Id.Split(',').Length; i++)
{
await _userRepository.DeleteAsync(Convert.ToInt64(input.Id.Split(',')[i]));
}
await _unitOfWorkManager.Current.SaveChangesAsync();
}

对 UserFriendlyException 的处理进行了修改,根据不同的异常 弹出不同的提示框

public UserFriendlyException(string message, UserFriendlyExceptionCode code)
: base(message)
{ if (code == UserFriendlyExceptionCode.Info)
{
Code = ;
}
else if (code == UserFriendlyExceptionCode.Warn)
{
Code = ;
}
else
{
Code = ;
}
}

EasyUI对应代码

$.ajax({
url: VE.AppPath + url,
type: 'post',
contentType: 'application/json',
data: JSON.stringify({ Id: VE.Ids.join(','), IsActive: active }),
dataType: 'json',
success: function (r) {
if (r.Success) {
VE.MessageShow("操作成功");
VE.GridJudge(gridId, isLoad, gridType);
} else {
if (r.Error.Code == ) {
$.messager.alert('提示', r.Error.Message, "error");
}
else if (r.Error.Code == ) {
$.messager.alert('提示', r.Error.Message, "info");
}
else if (r.Error.Code == ) {
$.messager.alert('提示', r.Error.Message, "warn");
} else {
$.messager.alert('提示', r.Error.Message, "error");
}
}
}
});

项目结构如下

  大家都喜欢源代码,F5直接运行,因此就写了个demo供大家参考

  源码下载

设置 V.Market.Web 为启动项目

修改 web.config 的连接字符串

<add name="Default" connectionString="data source=.;initial catalog=Market;persist security info=True;user id=sa;password=Password!;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

有的园友没学习过EntityFramework,不知如何生成数据库,下介绍数据库的生成方法

通过命令生成数据库 update-database (需运行两次才能把数据写到数据库)

修改生成的数据 abpuser表  的 TenantId 修改成1

由于上传代码时,忘记修改登录的用户名了,因此需修改 HomeController的 登录用户名为 Admin

ABP 初探 之基于EasyUI的CURD的更多相关文章

  1. 基于EasyUI Treegrid的权限管理资源列表

    1. 前言 最近在开发系统权限管理相关的功能,主要包含用户管理,资源管理,角色管理,组类别管理等小的模块.之前的Web开发中也用过jQueryEasyUI插件,感觉这款插件简单易用,上手很快.以前用到 ...

  2. 基于EasyUI实现windows桌面

    之前为大家介绍了 基于jquery tool实现的windows桌面效果,今天给大家带来一款基于EasyUI实现windows桌面.这款桌面适用浏览器:360.FireFox.Chrome.Safar ...

  3. 基于easyui的验证扩展

    基于easyui的验证扩展 ##前言 自己做项目也有好几年的时间了,一直没有时间整理自己的代码,趁春节比较闲,把自己以前的代码整理了一篇.这是基于easyui1.2.6的一些验证扩展,2012年就开始 ...

  4. 基于easyui的webform扩展(续)

    基于easyui的webform扩展(续) 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>.<基于easyui的webform扩展 ...

  5. 基于easyui的webform扩展

    基于easyui的webform扩展 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>前两篇介绍了mvc内如何基于easyui进行扩展,在 ...

  6. 前端基于easyui的mvc扩展(续)

    前端基于easyui的mvc扩展(续) 回顾及遗留问题 上一篇讲解了基于easyui的mvc扩展的基本实现,已经降低了在mvc内使用easyui的难度,但是仍然还有一些问题: 当我们要给生成的控件设置 ...

  7. 基于easyui框架中input 类型的checkbox拼接成字符串存入数据库和读取选中---善良公社项目

    项目中我做修改用户个人资料的时候,有一个需求是帮助人员的帮助类型如图下所示: 当初想如果是asp.net控件的话应该很简单实现,如果不是基于easyUI框架那就太简单了,现在是受框架的限制与是前端ht ...

  8. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。

    快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...

  9. 前端基于easyui的mvc扩展

    背景 由于MVC的前端是基于jquery.validate和jquery.validate.unobtrusive来实现的,但是当我们要使用其他的ui组件且组件本身就带有完整的验证功能的话,那么要让它 ...

随机推荐

  1. 神兵利器——Alfred

    有人的地方就有江湖,有江湖就有纷争. 很多人说我的文字风格相对轻松和温和,那是因为我很早就认识到,我们没有教育脑残和喷子的义务.在网际多年,看过太多虚拟的刀锋和鲜血,很多人被彻头彻尾的粉碎,挫骨扬灰, ...

  2. TODO:关于自媒体博客改名

    TODO:关于自媒体博客改名 1.微信公众号:ludong86 个人类帐号一个自然年内可主动修改两次名称 2.企鹅号 不能改帐号名称 3.简书 名称可以随意修改,但是个人主页是系统自动生成的. 4.今 ...

  3. Win8换成Win7系统问题小结(修改主板BIOS方法)

    问题描述: 笔记本电脑W8系统使用不习惯,想要换成W7系统,但不管是用光盘安装亦或是用U盘安装,在设置系统启动项的时候,选择从光盘启动或从U盘启动,但是回车点了之后没反应. 下面就说说问题的原因及解决 ...

  4. promise实现原理

    先看的这篇有问题的文章 花了很长时间研究这篇文章,卡在实现串行Promise那儿了,一直看不明白.就在刚才,发现这篇文章是错的,在第一次用setTimeout( ,0)那儿就错了.虽然用setTime ...

  5. 学习RBAC 用户·角色·权限·表

  6. Atitit 图像处理 深刻理解梯度原理计算.v1 qc8

    Atitit 图像处理 深刻理解梯度原理计算.v1 qc8 1.1. 图像处理  梯度计算  基本梯度 内部梯度 外部梯度 方向梯度1 2. 图像梯度就是图像边缘吗?2 1.1. 图像处理  梯度计算 ...

  7. 升级到Windows10

    1.Windows10的优点 2.需要安装的软件 实用软件: Firefox浏览器 Chrome浏览器 有道云笔记 Adobe Reader Adobe Flash Adobe PhotoShop 编 ...

  8. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

  9. DDD 领域驱动设计-三个问题思考实体和值对象(续)

    上一篇:DDD 领域驱动设计-三个问题思考实体和值对象 说实话,整理现在这一篇博文的想法,在上一篇发布出来的时候就有了,但到现在才动起笔来,而且写之前又反复读了上一篇博文的内容及评论,然后去收集资料, ...

  10. Oracle库Delete删除千万以上普通堆表数据的方法

    需求:Oracle数据库delete删除普通堆表千万条历史记录. 直接删除的影响: 1.可能由于undo表空间不足从而导致最终删除失败的问题: 2.可能导致undo表空间过度使用,影响到其他用户正常操 ...