目录

前言

示例概述

第一步:根据数据表创建Entity,Mapping和Repository对应的代码文件

第二步:在Application中添加CustomerApp实现客户档案的业务

第三步:Web的Areas文件夹下创建一个区域,并完成控制器创建;

第四步,在控制器Controller和前端cshtml页面中编写业务代码


前言

第一次拿到NFine框架的时候,我也是一脸懵逼,原框架作者黄林大大就写了一篇框架介绍,具体的教程也没有。当时想做一个业务方面的系统,但是研究了半天不知道如何下手。后来求了度娘半天,终于在CSDN,博客园等平台上零零散散找到了其他博主的使用心得,于是战战兢兢的摸索了一下午,终于完成了一个页面设计和访问。

原作者黄林大大的博客截图,是不是看着一脸懵逼?没事我重新整理了以下,今天就教大家如何一步一步的完成一个业务功能的实现。就拿建立一个客户资料管理来举例;

示例概述

我需要建立关于客户&&关系(CSDN老是说我含广告,他们眼瞎了)的业务大类模块,里面包括客&&户的档案,客&&户拜访,合同&&管理等子业务功能。今天只讲解如何添加客&户&档&案业务功能。

材料准备:客&户&管&理的子目录名为CustomerManage;数据库表名:CRM_Customer;客&户&档&案二级目录为Customer;

在之前写的  DaleCloud(原NFine)介绍一:开发框架源代码解决方案结构介绍  文章中介绍了解决方案中的每个项目的作用。这里要完整的实现一个业务功能,需要用到DaleCloud.Entity,DaleCloud.Mapping,DaleCloud.Repository,DaleCloud.Application以及前端web。

  1. 在Entity,Mapping,Repository添加对应的cs文件,此步骤可以通过工具实现。
  2. 在Application中添加CustomerApp实现业务。
  3. 在Web的Areas文件夹下创建一个区域:CustomerManage;
  4. 在CustomerManage区域的Controllers中添加Customer控制器;
  5. 在CustomerManage区域的Views添加Customer文件夹以及对应的cshtml文件(index,form,detail)。
  6. 至此可以浏览这个页面,然后再一步步实现增删改查。

第一步:根据数据表创建Entity,Mapping和Repository对应的代码文件

1)在Entity项目中新建CustomerManage文件夹,并添加CustomerEntity.cs文件,代码如下;

/******************************************************************************** Copyright © 2018 DaleCloud.Framework 版权所有* Author: DaleCloud* Description: DaleCloud* Website:
*********************************************************************************/using System;
using System.Text;
using System.Collections.Generic;
using System.Data;namespace DaleCloud.Entity.CustomerManage
{public class CustomerEntity : IEntityV2<CustomerEntity> , ICreationAuditedV2 , IModificationAuditedV2{ /// <summary>/// 主键/// </summary>     public string T_Id{ get; set; }        /// <summary>/// 客户编号/// </summary>      public string T_CustCode{ get; set; }        /// <summary>/// 客户名称/// </summary>        public string T_FullName{ get; set; }/// <summary>/// 客户类型/// </summary>        public string T_CustType { get; set; } /// <summary>/// 备注/// </summary>public string T_Remark { get; set; }/// <summary>/// 状态,1正式,0意向,-1删除/// </summary>        public int T_State{ get; set; }              /// <summary>/// 用户ID/// </summary>        public string T_CreatorUserId{ get; set; }          /// <summary>/// 操作时间/// </summary>     public DateTime? T_CreateTime { get; set; }        /// <summary>/// 更新用户/// </summary>      public string T_ModifyUserId{ get; set; }        /// <summary>/// 更新时间/// </summary>        public DateTime? T_ModifyTime{ get; set; }        }
}

2)在Mapping项目中新建CustomerManage文件夹,并添加CustomerMapping.cs文件,代码如下;

using DaleCloud.Entity.CustomerManage;
using System.Data.Entity.ModelConfiguration;namespace DaleCloud.Mapping.CustomerManage
{//CRM_Customerpublic class CustomerInfoMap : EntityTypeConfiguration<CustomerEntity>{public CustomerInfoMap(){this.ToTable("CRM_Customer");this.HasKey(t => t.T_Id);}}
}

3)在Repository项目中新建CustomerManage文件夹,并添加CustomerRepository.js文件,代码如下;

using DaleCloud.DataBase;
using DaleCloud.Entity.CustomerManage;namespace DaleCloud.Repository.CustomerManage
{//CRM_Customerpublic class CustomerInfoRepository : RepositoryBase<CustomerEntity>, IRepositoryBase<CustomerEntity>{}
}

以上文件,都可以通过工具来实现,我通过动软代码生成器自定义了一个模板,通过模板可以把数据库表生成对应的Entity,Mapping和Repository文件。适合大多数项目使用。需要的可以通过加群(群 号:920900045)在群文件中下载。

第二步:在Application中添加CustomerApp实现客户档案的业务

1)在Application项目中新建CustomerManage文件夹,并添加CustomerApp.cs文件,并完成增删改查代码;

using System;
using System.Collections.Generic;
using System.Linq;
using DaleCloud.Code;
using DaleCloud.Entity.CustomerManage;
using DaleCloud.Repository.CustomerManage;namespace DaleCloud.Application.CustomerManage
{public class CustomerApp{private CustomerInfoRepository service = new CustomerInfoRepository();public List<CustomerEntity> GetList(){return service.IQueryable().OrderBy(t => t.T_CreateTime).ToList();}/// <summary>/// 获取客户信息/// </summary>/// <param name="pagination">分页</param>/// <param name="startdate">起始时间</param>/// <param name="enddate">结束时间</param>/// <param name="keyword">关键字</param>/// <returns></returns>public List<CustomerEntity> GetList(Pagination pagination, string startdate, string enddate,  string keyword = ""){var expression = ExtLinq.True<CustomerEntity>();if(startdate!=null && enddate!=null){DateTime sdate = DateTime.Parse(startdate);DateTime edate = DateTime.Parse(enddate);expression = expression.And(t => t.T_CreateTime > sdate && t.T_CreateTime < edate);}if (!string.IsNullOrEmpty(keyword)){expression = expression.And(t => t.T_FullName.Contains(keyword));expression = expression.Or(t => t.T_CaliName.Contains(keyword));expression = expression.Or(t => t.T_Linkman.Contains(keyword));expression = expression.Or(t => t.T_Mobile.Contains(keyword));}return service.FindList(expression, pagination).OrderBy(t => t.T_CreateTime).ToList();}/// <summary>/// 获取客户实体/// </summary>/// <param name="keyValue"></param>/// <returns></returns>public CustomerEntity GetForm(string keyValue){return service.FindEntity(keyValue);}/// <summary>/// 删除记录/// </summary>/// <param name="keyValue"></param>public void DeleteForm(string keyValue){var data = service.IQueryable().Single(t => t.T_Id.Equals(keyValue));if (data != null && data.T_State ==1){throw new Exception("删除失败!正式客户不允许删除。");}else{service.Delete(t => t.T_Id == keyValue);}}/// <summary>/// 保存表单/// </summary>/// <param name="mEntity"></param>/// <param name="keyValue">主键</param>public void SubmitForm(CustomerEntity mEntity, string keyValue){if (!string.IsNullOrEmpty(keyValue)){mEntity.Modify(keyValue);service.Update(mEntity);}else{mEntity.Create();service.Insert(mEntity);}}}
}

第三步:Web的Areas文件夹下创建一个区域,并完成控制器创建;

1)在Areas文件夹下右键添加一个区域,名称为:CustomerManage。VS2015会自动创建一个对应的文件夹,下面包含Controllers,Models,Views文件夹和一个CustomerManageAreaRegistration.cs的区域注册器文件。

2)打开CustomerManageAreaRegistration.cs文件,编写代码如下(其实你也可以从其他已有的区域注册器中把代码复制拷贝过来,然后改一下AreaName方法中的返回名称就行):

using System.Web.Mvc;namespace DaleCloud.Web.Areas.CustomerManage
{public class CustomerManageAreaRegistration : AreaRegistration{public override string AreaName{get{return "CustomerManage";}}public override void RegisterArea(AreaRegistrationContext context){context.MapRoute(this.AreaName + "_Default",this.AreaName + "/{controller}/{action}/{id}",new { area = this.AreaName, controller = "Home", action = "Index", id = UrlParameter.Optional },new string[] { "DaleCloud.Web.Areas." + this.AreaName + ".Controllers" });}}
}

3)在CustomerManage文件夹下右键添加一个空白的MVC5控制器-,名称为:CustomerController。VS2015会自动在Controllers创建一个CustomerController.cs文件,在Views文件夹中创建Customer文件夹。请将你的页面文件放入到Customer文件夹。

一般情况下我们常用到的页面包括:Index.cshtml(列表页)、Form.cshtml(表单页)、Details.cshtml(详细页)

第四步,在控制器Controller和前端cshtml页面中编写业务代码

1)开始编写CustomerController控制器中的编写视图模板输出代码和增删改查后台接收的代码。

在CustomerController类中可以通过继承ControllerBasev2或ControllerBase类来实现对Index,Form,Details页面模板输出和Json格式数据输出。ControllerBasev2是我自己单独定义的,目的是去除登陆超时验证,因为我的项目中不需要;

using System;
using System.Web;
using System.Web.Mvc;
using DaleCloud.Code;
using DaleCloud.Application.CustomerManage;
using DaleCloud.Entity.CustomerManage;namespace DaleCloud.Web.Areas.CustomerManage.Controllers
{public class CustomerController : ControllerBasev2{private CustomerApp app = new CustomerApp();[HttpGet][HandlerAjaxOnly]public ActionResult GetGridJson(Pagination pagination, string fromdate, string todate,string keyword){try{var data = app.GetList(pagination, fromdate, todate, keyword);return DataGrid(pagination.records, data);}catch (Exception ex){return Content(ex.ToJson());}}[HttpGet][HandlerAjaxOnly]public ActionResult GetFormJson(string keyValue){var data = app.GetForm(keyValue);return Content(data.ToJson());}[HttpPost][ValidateAntiForgeryToken]public ActionResult SubmitForm(CustomerEntity uEntity, string keyValue){app.SubmitForm(uEntity, keyValue);return Success("操作成功。");}[HttpPost][HandlerAjaxOnly][HandlerAuthorize][ValidateAntiForgeryToken]public ActionResult DeleteForm(string keyValue){app.DeleteForm(keyValue);return Success("删除成功。");}}
}

一般,我们习惯在Index页面中通过调用GetGridJson来获取数据列,通过DeleteForm来删除一条记录。在Form页面中通过GetFormJson获取表单数据,通过SubmitForm来接收前端提交表单数据。当然你们根据个人喜好以及实际业务需求来自定义输出。

在控制器代码中,其中值得注意的,每个方法前都会有一些特征代码,很多人搞不清楚有什么意思,然后出现无法正确提交表单等情况:

[HttpGet] // 表示该方法仅处理来自get的请求。如果你是使用easyUI等前端框架,那么在调用该方法的时候必须指明method为get类型;[HttpPost]// 表示该方法仅处理来自post的请求。如果你用easyUI的表单提交,请在<form id="form1" >加上method="post",否则无法提交表单;[HandlerAjaxOnly] // 表示指定前端页面的请求只能为Ajax请求,建议你们使用过程可以去除该代码[HandlerAuthorize] // 表示该方法是否需要判断用户角色的权限,这就需要涉及到菜单的按钮中URL地址配置了,如果不会配置,请移除该代码。[ValidateAntiForgeryToken] // 表示阻止伪造请求的特征验证。用来验证表单提交的,原框架提交表单的方法和现在使用easyUI提交表单的方法都支持了特征验证。为了安全起见可以使用。

至此,你就可以编译,访问页面了。

以上就是一如何新建一个业务功能的实战说明,有什么阐述不清楚的地方,请加群交流,也欢迎留言指正拍砖。

关于Entity实体类中如的继承以及ICreationAuditedV2, IModificationAuditedV2接口使用说明,请看后续文章

DaleCloud(原NFine)介绍三:后台业务功能开发实战演示相关推荐

  1. 方维O2O系统 后台业务员功能开发

    方维O2O系统 后台业务员功能开发 需求如下: 开发一个管理员,叫做业务员有特别的权限,就是后台可以给业务员一个账号,然后业务员每次出去拉到团购回来,上传商户,之后,运营后能在业务员自己的账号权限内看 ...

  2. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇)...

    .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇) 前言:这个系列有段时间没有动了.主要是针对大家的反馈在修改代码.在修改的过程中,也有了一些新的体会,这里和大家分享一下,同时也 ...

  3. [原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略

    .NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略 前言:之前的讨论一直关注在怎么从DAL中获取数据,以及数据的Mapping问题.实际上,一个业务框架最主要的作用就是简化业务 ...

  4. [原创].NET 业务框架开发实战之六 DAL的重构

    .NET 业务框架开发实战之六 DAL的重构 前言:其实这个系列还是之前的".NET 分布式架构开发实战 ",之所以改了名字,主要是因为文章的标题带来了不少的歧义:系列文章中本打算 ...

  5. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇)...

    .NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 前言:接着上篇来. 系列文章链接: [原创].NET 分布式架构开发实战之一 故事起源 [原创].NET 分布式架构开发实战之 ...

  6. 天猫整站Springboot 从零开始搭建(四(2,3))——后台分类管理功能开发

    3 后台分类管理 3.1概述 到这里就开始讲解功能开发了. 开发整站的顺序,通常来说还是按照依赖性来进行,前端需要的数据,都要先通过后台的功能维护在数据库中,才可以拿到. 所以,先进行后台功能的开发, ...

  7. Vue电商后台管理系统项目开发实战(一)

    前言 当下根据不同的应用场景,电商系统一般都提供了PC端,移动APP,移动Web,微信等多种访问方式.如下图. 不同的客户端共用同一个服务器,数据库,API.本次项目着重设计PC后台管理,供电商后台管 ...

  8. yii2-basic后台管理功能开发之四:图片上传FileInput

    我采用的是 kartik-v/yii2-widget-fileinput的文件上传插件,大家可以去github查看详细的安装方法和使用说明. 需求:上传图片+可以预览缩略图 在这里说说我碰到的问题:限 ...

  9. 企业级业务系统开发实战-序言

    前些年一直在做微软的解决方案实施与软件开发的工作.在学习.项目实施.开发与管理的过程中学到了别人不少好的东西,也自身总结了大量的经验,希望能够通过一个系列来跟大家分享关于软件开发方面的内容. 这个开发 ...

  10. 【Unity小功能开发实战教程】制作跟随倒计时变化的进度条

    文章目录

最新文章

  1. Tomcat 相关配置
  2. Java基础 Day14 泛型
  3. UEditor 百度富文本编辑器 .Net实例
  4. 阿里巴巴分布式事务利器Seata环境准备
  5. python装饰器函数执行后日志_python 装饰器理解
  6. Python自动化面试常见的编程题及答案
  7. C#完整的通信代码(点对点,点对多,同步,异步,UDP,TCP),多多宜善
  8. 点阵字体显示系列补记:将字库文件转换成数组形式
  9. Atitit maven配置pom文件 配置法v2 t33 目录 1. Maven打包war原理 1 1.1. 在target目录生成war包ori目录。。。里面就是所有的资源 1 1.2. 去掉
  10. loadruner知识点小结
  11. 微信小程序上线,后台接口失效问题
  12. 魔方教程公式口诀七步「视频教程」
  13. linux 文本筛选基因,linux – 如何将snps映射到ref基因文件
  14. word脚注、尾注小技巧|怎么删除尾注的横线|怎么快速删除页眉的横线|怎么快速将尾注和脚注转为带方括号的格式
  15. 三星schi779 android版本更新,SCH-I779
  16. 【日记本砸】21.01.08-12 最快的成长方式就是慢慢来
  17. AR技术与VR技术哪个更能代表未来?
  18. PS CS5学习(激活序列号后每次重启有要重新输入的问题
  19. 【联邦学习FATE框架实战】(二)用FATE从零开始实现横向逻辑回归
  20. 【imessage苹果推群发】软件安装,通过苹果的TestFlight筹划分派

热门文章

  1. QTouch Linux 组态软件
  2. 测试狗:Zview软件拟合电化学阻抗谱教程
  3. 一种数字全息自动聚焦技术研究及实例分析
  4. 3.3 以太网交换机
  5. 移远 EC20 模组(4G通信模组)转载
  6. B站(云e办)SpringBoot实战练习的Sql文件、前端Vue源码、后端springboot源码
  7. mysql sqlyog 1045_sqlyog错误代码1045
  8. Python 模拟黑客帝国中的“代码雨”
  9. 科沃斯扫地机器人电路原理图_科沃斯扫地机器人不工作故障维修(CEN550)
  10. 121道分布式面试题和答案