惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
F
Fortinet All Blogs
U
Unit 42
F
Full Disclosure
雷峰网
雷峰网
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
罗磊的独立博客
D
DataBreaches.Net
C
Check Point Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
O
OpenAI News
C
CXSECURITY Database RSS Feed - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
NISL@THU
NISL@THU
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
Webroot Blog
Webroot Blog
Security Latest
Security Latest
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Google DeepMind News
Google DeepMind News
酷 壳 – CoolShell
酷 壳 – CoolShell
N
News | PayPal Newsroom
P
Proofpoint News Feed
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
Google Online Security Blog
Google Online Security Blog
H
Help Net Security
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
M
MIT News - Artificial intelligence
Vercel News
Vercel News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
MyScale Blog
MyScale Blog
腾讯CDC

博客园 - 衡斅

基于.net C# Socket WinForm MQTT 客户端开发 基于.Net C# 通信开发-网络调试助手 基于.Net C# 通信开发-串口调试助手 基于HBuilderX+UniApp+ColorUi+UniCloud 优宝库 开发实战(一) .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡 .Net Core 跨平台开发实战-服务器缓存:本地缓存、分布式缓存、自定义缓存 redis 分布式缓存实战-redis 事务 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(4)-Excel文件读、写操作 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(3)-项目依赖注入 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(1)-Web前端页面 基于html5 plus + Mui 移动App开发(三)-食全库 基于Html5 Plus + Vue + Mui 移动App开发(三)-文件操作(读取、保存、更新数据) 基于Html5 Plus + Vue + Mui 移动App 开发(二) 基于html5 plus + Mui 移动App开发(一) 基于百度地图的产品销售的单位查看功能设计与实现 实全软件产品自动升级管理解决方案 基于服务(Web Service)的文件管理Winform客户端实现(二) 如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件 如何通过SerialPort读取和写入设备COM端口数据
基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建
衡斅 · 2019-08-30 · via 博客园 - 衡斅

本节将介绍如何进行业务项目搭建。

本业务项目示例是简单的企业信息管理功能,业务项目采用Code First方式,搭建包括:

  1. 创建实体项目
  2. 创建实体数据表映射
  3. 创建业务处理项目
  4. 创建业务Web项目

搭建完项目效果:

1、创建实体项目-ShiQuan.Company.Entity

创建企业信息实体

示例中企业信息包括:编号、名称、负责人、联系人、联系电话、联系地址等

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ShiQuan.Company.Entity
{
    /// <summary>
    /// 企业信息
    /// </summary>
    public class CompanyInfoEntity:BasicCompanyEntity
    {
        /// <summary>
        /// 编号
        /// </summary>
        [Display(Name = "编号"), MaxLength(50)]
        public string Code { get; set; }
        /// <summary>
        /// 编号
        /// </summary>
        [Display(Name = "编号"), MaxLength(100)]
        public string Name { get; set; }
        /// <summary>
        /// 负责人
        /// </summary>
        [Display(Name = "负责人"), MaxLength(50)]
        public string Leader { get; set; }
        /// <summary>
        /// 联系人
        /// </summary>
        [Display(Name = "联系人"), MaxLength(50)]
        public string Linkman { get; set; }
        /// <summary>
        /// 联系电话
        /// </summary>
        [Display(Name = "联系电话"), MaxLength(50)]
        public string Phone { get; set; }
        /// <summary>
        /// 联系地址
        /// </summary>
        [Display(Name = "联系地址"), MaxLength(255)]
        public string Address { get; set; }
        /// <summary>
        /// 备注说明
        /// </summary>
        [Display(Name = "备注说明"), MaxLength(255)]
        public string Remark { get; set; }
    }
}

2、创建实体数据表映射项目-ShiQuan.Company.Mapping

创建空数据库

创建项目

创建企业信息数据表映射

using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ShiQuan.Company.Mapping
{
    /// <summary>
    /// 实体数据映射
    /// </summary>
    public class CompanyInfoMap : EntityTypeConfiguration<CompanyInfoEntity>
    {
        public CompanyInfoMap()
        {
            #region 表、主键
            //
            this.ToTable("CompanyInfo");
            //主键
            this.HasKey(t => t.Id);
            #endregion

            #region 配置关系
            #endregion
        }
    }
}

创建实体数据库上下文

选择空Code First 模型

namespace ShiQuan.Company.Mapping
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration.Conventions;
    using System.Linq;

    public class CompanyDbContext : DbContext
    {
        //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)
        //使用“CompanyDbContext”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的
        //“ShiQuan.Company.Mapping.CompanyDbContext”数据库。
        // 
        //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“CompanyDbContext”
        //连接字符串。
        public CompanyDbContext()
            : base("name=CompanyDbContext")
        {
        }

        //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First  模型
        //的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109// public virtual DbSet<MyEntity> MyEntities { get; set; }
        /// <summary>
        /// 重写数据型号创建,添加企业信息数据表映射
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            
            modelBuilder.Configurations.Add(new CompanyInfoMap());

            base.OnModelCreating(modelBuilder);
        }
    }
}

配置数据库连接

  <connectionStrings>
    <add name="CompanyDbContext" connectionString="Server=127.0.0.1;Initial Catalog=VSD_CompanyDB;User ID=sa;Password=123456*a" providerName="System.Data.SqlClient" />
  </connectionStrings>

配置数据库上下文允许进行更新升级

using System;
using System.Collections.Generic;
using System.Data.Entity.Migrations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ShiQuan.Company.Mapping.Migrations
{
    internal sealed class Configuration : DbMigrationsConfiguration<CompanyDbContext>
    {
        public Configuration()
        {
            //配置允许数据库更新升级
            AutomaticMigrationsEnabled = true;
            AutomaticMigrationDataLossAllowed = true;
        }

        protected override void Seed(CompanyDbContext dbContext)
        {
            
        }
    }
}

使用update-database 对数据库进行升级更新

3、创建企业信息管理业务处理项目-ShiQuan.Company.Business

创建企业信息库业务处理基础类,实现实体查询、删除和保存功能。

using Learun.DataBase.Repository;
using Learun.Util;
using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace ShiQuan.Company.Business
{
    /// <summary>
    /// 企业信息管理库业务处理基础类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class BasicCompanyBLL<T> : RepositoryFactory<T> where T : class,new()
    {
        protected string dbConn = "";

        /// <summary>
        /// 构造函数
        /// </summary>
        public BasicCompanyBLL()
        {
            //this.dbConn = ConfigurationManager.ConnectionStrings["CompanyDbContext"].ConnectionString;
            this.dbConn = "CompanyDbContext";
        }
        #region 获取数据
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="pagination">分页</param>
        /// <param name="queryJson">查询参数</param>
        /// <returns>返回分页列表</returns>
        public virtual IEnumerable<T> GetPageList(Pagination pagination, string queryJson)
        {
            var expression = LinqExtensions.True<T>();
            expression = QueryStringToExpression(expression, queryJson);
            return this.BaseRepository(dbConn).FindList(expression, pagination);
        }
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="pagination">分页</param>
        /// <param name="queryJson">查询参数</param>
        /// <returns>返回分页列表</returns>
        public virtual IEnumerable<T> GetPageList(Pagination pagination, Expression<Func<T, bool>> linq)
        {
            return this.BaseRepository(dbConn).FindList(linq, pagination);
        }
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="queryJson">查询参数</param>
        /// <returns>返回列表</returns>
        public virtual IEnumerable<T> GetList(string queryJson)
        {
            var expression = LinqExtensions.True<T>();
            expression = QueryStringToExpression(expression, queryJson);
            return this.BaseRepository(dbConn).IQueryable(expression);
        }
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="queryJson">查询参数</param>
        /// <returns>返回列表</returns>
        public virtual IQueryable<T> GetList(Expression<Func<T, bool>> linq)
        {
            return this.BaseRepository(dbConn).IQueryable(linq);
        }
        /// <summary>
        /// 获取实体
        /// </summary>
        /// <param name="keyValue">主键值</param>
        /// <returns></returns>
        public virtual T GetEntity(string keyValue)
        {
            return this.BaseRepository(dbConn).FindEntity(keyValue);
        }

        /// <summary>
        /// 根据条件获取实体
        /// </summary>
        /// <param name="linq">Linq条件</param>
        /// <returns></returns>
        public virtual T FindEntity(Expression<Func<T, bool>> linq)
        {
            return this.BaseRepository(dbConn).FindEntity(linq);
        }
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="queryJson"></param>
        /// <returns></returns>
        public virtual DataTable GetTable(string queryJson)
        {
            string sql = GetSQL(queryJson);
            return this.BaseRepository(dbConn).FindTable(sql);
        }
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public virtual DataTable GetTableBySql(string sql)
        {
            //string sql = GetSQL(queryJson);
            return this.BaseRepository(dbConn).FindTable(sql);
        }
        /// <summary>
        /// 获取分页列表,返回Datatable
        /// </summary>
        /// <param name="queryJson">查询参数</param>
        /// <returns>返回列表</returns>
        public virtual DataTable GetPageTable(Pagination pagination, string queryJson)
        {
            string sql = GetSQL(queryJson);
            return this.BaseRepository(dbConn).FindTable(sql, pagination);
        }
        /// <summary>
        /// 获取分页列表,返回Datatable
        /// </summary>
        /// <param name="sql">查询参数</param>
        /// <returns>返回列表</returns>
        public virtual DataTable GetPageTableBySql(Pagination pagination, string sql)
        {
            //string sql = GetSQL(queryJson);
            return this.BaseRepository(dbConn).FindTable(sql, pagination);
        }
        #endregion

        #region 提交数据
        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="keyValue">主键</param>
        public virtual void RemoveForm(string keyValue)
        {
            string[] dels = keyValue.Split(',');
            if (dels.Length > 1)
            {
                IRepository db = new RepositoryFactory().BaseRepository(dbConn).BeginTrans();
                try
                {
                    foreach (var item in dels)
                    {
                        db.Delete(item);
                    }
                    db.Commit();
                }
                catch (Exception)
                {
                    db.Rollback();
                    throw;
                }
            }
            else
            {
                this.BaseRepository(dbConn).Delete(keyValue);
            }
        }
        /// <summary>
        /// 保存表单(新增、修改)
        /// </summary>
        /// <param name="keyValue">主键值</param>
        /// <param name="entity">实体对象</param>
        /// <returns></returns>
        public virtual void SaveForm(string keyValue, T entity)
        {
            if (!string.IsNullOrEmpty(keyValue))
            {
                this.BaseRepository(dbConn).Update(entity);
            }
            else
            {
                this.BaseRepository(dbConn).Insert(entity);
            }
        }
        #endregion

        #region 帮助函数
        /// <summary>
        /// 生成查询表达式
        /// </summary>
        /// <param name="queryJson">查询对象</param>
        /// <returns></returns>
        protected virtual Expression<Func<T, bool>> QueryStringToExpression(Expression<Func<T, bool>> expression, string queryJson)
        {
            if (string.IsNullOrEmpty(queryJson))
                return expression;
            var queryParam = queryJson.ToJObject();
            if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty())
            {
                string condition = queryParam["condition"].ToString();
                string keyword = queryParam["keyword"].ToString();
                switch (condition)
                {
                    default: break;
                }
            }
            return expression;
        }
        /// <summary>
        /// 根据实体生成SQL
        /// </summary>
        /// <param name="queryJson">查询对象</param>
        /// <returns></returns>
        protected virtual string GetSQL(string queryJson)
        {
            StringBuilder sb = new StringBuilder();
            var queryParam = queryJson.ToJObject();
            if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty())
            {
                string condition = queryParam["condition"].ToString();
                string keyword = queryParam["keyword"].ToString();
                sb.Append(" AND " + condition + " like '%" + keyword + "%'");
            }
            return sb.ToString();
        }
        #endregion
    }
}

创建企业信息业务处理类,继承基础业务处理类,重写保存、过滤条件方法。

using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Linq.Expressions;
using Learun.Util;
using Learun.Util.Operat;

namespace ShiQuan.Company.Business
{
    /// <summary>
    /// 实现企业信息管理业务处理,继承企业信息库基础业务处理
    /// </summary>
    public class CompanyInfoBLL : BasicCompanyBLL<CompanyInfoEntity>
    {
        /// <summary>
        /// 数据保存
        /// </summary>
        /// <param name="keyValue"></param>
        /// <param name="entity"></param>
        public override void SaveForm(string keyValue, CompanyInfoEntity entity)
        {
            try
            {
                if (string.IsNullOrEmpty(keyValue))
                {
                    entity.Id = Guid.NewGuid().ToString();
                }
                else
                    entity.Id = keyValue;

                base.SaveForm(keyValue, entity);
            }
            catch (Exception ex)
            {

                throw;
            }
        }
        /// <summary>
        /// 重写查询过滤条件
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="queryJson"></param>
        /// <returns></returns>
        protected override Expression<Func<CompanyInfoEntity, bool>> QueryStringToExpression(Expression<Func<CompanyInfoEntity, bool>> expression, string queryJson)
        {
            if (string.IsNullOrEmpty(queryJson))
                return expression;
            var queryParam = queryJson.ToJObject();
            if (queryParam["Code"].IsEmpty() == false)
            {
                string keyword = queryParam["Code"].ToString();
                expression = expression.And(my => my.Code == keyword);
            }
            if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty())
            {
                string condition = queryParam["condition"].ToString();
                string keyword = queryParam["keyword"].ToString();
                switch (condition)
                {
                    default: break;
                }
            }
            return expression;
        }
    }
}

4、创建企业信息管理Web项目-ShiQuan.Company.Web

创建空的企业信息管理控制器,实现列表、编辑视图,数据查询、删除、保存方法。

using Learun.Application.Web;
using Learun.Util;
using ShiQuan.Company.Business;
using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ShiQuan.Company.Web.Areas.CompanyManage.Controllers
{
    /// <summary>
    /// 企业信息管理
    /// </summary>
    public class CompanyInfoController : MvcControllerBase
    {
        // GET: CompanyManage/CompanyInfo
        CompanyInfoBLL service = new CompanyInfoBLL();
        /// <summary>
        /// 列表视图
        /// </summary>
        /// <returns></returns>
        public ActionResult CompanyInfoIndex()
        {
            return View();
        }
        /// <summary>
        /// 编辑视图
        /// </summary>
        /// <returns></returns>
        public ActionResult CompanyInfoForm()
        {
            return View();
        }

        #region 获取数据
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="pagination">分页参数</param>
        /// <param name="queryJson">查询参数</param>
        /// <returns>返回分页列表Json</returns>
        [HttpGet]
        public ActionResult GetPageListJson(string pagination, string queryJson)
        {
            Pagination paginationobj = pagination.ToObject<Pagination>();
            var watch = CommonHelper.TimerStart();
            var data = service.GetPageList(paginationobj, queryJson);
            var jsonData = new
            {
                rows = data,
                total = paginationobj.total,
                page = paginationobj.page,
                records = paginationobj.records,
                costtime = CommonHelper.TimerEnd(watch)
            };
            //return ToJsonResult(jsonData);
            return Success(jsonData);
        }
        /// <summary>
        /// 获取列表
        /// </summary>
        /// <param name="queryJson">查询参数</param>
        /// <returns>返回列表Json</returns>
        [HttpGet]
        public ActionResult GetListJson(string queryJson)
        {
            var data = service.GetList(queryJson);
            return ToJsonResult(data);
        }
        /// <summary>
        /// 获取实体 
        /// </summary>
        /// <param name="keyValue">主键值</param>
        /// <returns>返回对象Json</returns>
        [HttpGet]
        public ActionResult GetFormJson(string keyValue)
        {
            var data = service.GetEntity(keyValue);
            return ToJsonResult(data);
        }
        #endregion

        #region 提交数据
        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="keyValue">主键值</param>
        /// <returns></returns>
        [HttpPost]
        [ValidateAntiForgeryToken]
        [AjaxOnly]
        public ActionResult RemoveForm(string keyValue)
        {
            service.RemoveForm(keyValue);
            return Success("删除成功。");
        }
        /// <summary>
        /// 保存表单(新增、修改)
        /// </summary>
        /// <param name="keyValue">主键值</param>
        /// <param name="entity">实体对象</param>
        /// <returns></returns>
        [HttpPost]
        [ValidateAntiForgeryToken]
        [AjaxOnly]
        public ActionResult SaveForm(string keyValue, CompanyInfoEntity entity)
        {
            service.SaveForm(keyValue, entity);
            return Success("操作成功。", entity);
        }
        #endregion
    }
}

创建列表界面

@{
    ViewBag.Title = "客户管理";
    Layout = "~/Views/Shared/_Index.cshtml";
}
<div class="lr-layout">
    <div class="lr-layout-center">
        <div class="lr-layout-wrap lr-layout-wrap-notitle">
            <div class="lr-layout-tool">
                <div class="lr-layout-tool-left">
                    <div class="lr-layout-tool-item">
                        <input id="txt_Keyword" type="text" class="form-control" placeholder="请输查询关键字" />
                    </div>
                    <div class="lr-layout-tool-item">
                        <a id="btn_Search" class="btn btn-primary btn-sm"><i class="fa fa-search"></i>&nbsp;<span class="lrlg">查询</span></a>
                    </div>
                </div>
                <div class="lr-layout-tool-right">
                    <div class="btn-group btn-group-sm">
                        <a id="btnReload" class="btn btn-default"><i class="fa fa-refresh"></i></a>
                    </div>
                    <div class="btn-group btn-group-sm" learun-authorize="yes">
                        <a id="btnAdd" class="btn btn-default"><i class="fa fa-plus"></i>&nbsp;<span class="lrlg">新增</span></a>
                        <a id="btnEdit" class="btn btn-default"><i class="fa fa-pencil-square-o"></i>&nbsp;<span class="lrlg">编辑</span></a>
                        <a id="btnDelete" class="btn btn-default"><i class="fa fa-trash-o"></i>&nbsp;<span class="lrlg">删除</span></a>
                    </div>
                </div>
            </div>
            <div class="lr-layout-body" id="gridtable"></div>
        </div>
    </div>
</div>
<script type="text/javascript">
    var refreshGirdData; // 更新数据
    var selectedRow;
    var bootstrap = function ($, learun) {
        "use strict";
        var page = {
            init: function () {
                page.initGrid();
                page.bind();
            },
            bind: function () {
                // 查询
                $('#btn_Search').on('click', function () {
                    var keyword = $('#txt_Keyword').val();
                    page.search({ keyword: keyword });
                });
                // 刷新
                $('#btnReload').on('click', function () {
                    location.reload();
                });
                // 新增
                $('#btnAdd').on('click', function () {
                    selectedRow = null;//新增前请清空已选中行
                    learun.layerForm({
                        id: 'form',
                        title: '新增客户',
                        url: top.$.rootUrl + '/CompanyManage/CompanyInfo/CompanyInfoForm',
                        width: 600,
                        height: 400,
                        maxmin: true,
                        callBack: function (id) {
                            return top[id].acceptClick(refreshGirdData);
                        }
                    });
                });
                // 编辑
                $('#btnEdit').on('click', function () {
                    selectedRow = $('#gridtable').jfGridGet('rowdata');
                    var keyValue = $('#gridtable').jfGridValue('Id');
                    if (learun.checkrow(keyValue)) {
                        learun.layerForm({
                            id: 'form',
                            title: '编辑客户',
                            url: top.$.rootUrl + '/CompanyManage/CompanyInfo/CompanyInfoForm',
                            width: 600,
                            height: 400,
                            maxmin: true,
                            callBack: function (id) {
                                return top[id].acceptClick(refreshGirdData);
                            }
                        });
                    }
                });
                // 删除
                $('#btnDelete').on('click', function () {
                    var keyValue = $('#gridtable').jfGridValue('Id');
                    if (learun.checkrow(keyValue)) {
                        learun.layerConfirm('是否确认删除该项!', function (res) {
                            if (res) {
                                learun.deleteForm(top.$.rootUrl + '/CompanyManage/CompanyInfo/DeleteForm', { keyValue: keyValue }, function () {
                                    refreshGirdData();
                                });
                            }
                        });
                    }
                });
            },
            initGrid: function () {
                $('#gridtable').jfGrid({
                    url: top.$.rootUrl + '/CompanyManage/CompanyInfo/GetPageListJson',
                    headData: [
                        { label: '编号', name: 'Code', width: 100, align: 'left' },
                        { label: '名称', name: 'Name', width: 200, align: 'left' },
                        { label: '负责人', name: 'Leader', width: 100, align: 'left' },
                        { label: '联系人', name: 'Linkman', width: 100, align: 'left' },
                        { label: '联系电话', name: 'Phone', width: 100, align: 'left' },
                        { label: '联系地址', name: 'Address', width: 200, align: 'left' },
                        {
                            label: "最后更新", name: "ModifyDate", width: 140, align: "left",
                            formatter: function (cellvalue) {
                                return learun.formatDate(cellvalue, 'yyyy-MM-dd hh:mm');
                            }
                        },
                        { label: '备注', name: 'Remark', width: 200, align: 'left' },
                    ],
                    mainId: 'Id',
                    reloadSelected: true,
                    isPage: true,
                    sidx: 'Code'
                });
                page.search();
            },
            search: function (param) {
                $('#gridtable').jfGridSet('reload', param);
            }
        };
        // 保存数据后回调刷新
        refreshGirdData = function () {
            page.search();
        }
        page.init();
    }
</script>

创建编辑界面

@{
    ViewBag.Title = "客户添加";
    Layout = "~/Views/Shared/_Form.cshtml";
}
<div class="lr-form-wrap" id="form">
    <div class="col-xs-12 lr-form-item">
        <div class="lr-form-item-title">编号<font face="宋体">*</font></div>
        <input id="Code" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
    </div>
    <div class="col-xs-12 lr-form-item">
        <div class="lr-form-item-title">名称<font face="宋体">*</font></div>
        <input id="Name" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
    </div>
    <div class="col-xs-12 lr-form-item">
        <div class="lr-form-item-title">负责人<font face="宋体">*</font></div>
        <input id="Leader" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />
    </div>
    <div class="col-xs-12 lr-form-item">
        <div class="lr-form-item-title">联系人</div>
        <input id="Linkman" type="text" class="form-control" isvalid="no" checkexpession="NotNull" />
    </div>
    <div class="col-xs-12 lr-form-item">
        <div class="lr-form-item-title">联系电话</div>
        <input id="Phone" type="text" class="form-control" />
    </div>
    <div class="col-xs-12 lr-form-item">
        <div class="lr-form-item-title">联系地址</div>
        <input id="Address" type="text" class="form-control" />
    </div>
    <div class="col-xs-12 lr-form-item">
        <div class="lr-form-item-title">备注</div>
        <textarea id="Remark" class="form-control" style="height: 50px;"></textarea>
    </div>
</div>
<script type="text/javascript">
    var acceptClick;
    var keyValue = '';
    var bootstrap = function ($, learun) {
        "use strict";
        var selectedRow = learun.frameTab.currentIframe().selectedRow;
        var page = {
            init: function () {
                page.bind();
                page.initData();
            },
            bind: function () {
                // 客户级别
                //$('#F_CustLevelId').lrDataItemSelect({ code: 'Client_Level', maxHeight: 230 });
                //// 客户类别
                //$('#F_CustTypeId').lrDataItemSelect({ code: 'Client_Sort', maxHeight: 230 });
                //// 客户程度
                //$('#F_CustDegreeId').lrDataItemSelect({ code: 'Client_Degree', maxHeight: 230 });
                ////跟进人员
                //$('#F_TraceUserId').lrformselect({
                //    layerUrl: top.$.rootUrl + '/LR_OrganizationModule/User/SelectForm',
                //    layerUrlW: 800,
                //    layerUrlH: 520,
                //    dataUrl: top.$.rootUrl + '/LR_OrganizationModule/User/GetListByUserIds'
                //});
                ////公司行业
                //$('#F_CustIndustryId').lrDataItemSelect({ code: 'Client_Trade', maxHeight: 230 });
            },
            initData: function () {
                if (!!selectedRow) {
                    keyValue = selectedRow.Id;
                    $('#form').lrSetFormData(selectedRow);
                }
            }
        };
        // 保存数据
        acceptClick = function (callBack) {
            if (!$('#form').lrValidform()) {
                return false;
            }
            var postData = $('#form').lrGetFormData(keyValue);
            $.lrSaveForm(top.$.rootUrl + '/CompanyManage/CompanyInfo/SaveForm?keyValue=' + keyValue
                , postData
                , function (res) {
                // 保存成功后才回调
                if (!!callBack) {
                    callBack();
                }
            });
        };
        page.init();
    }
</script>

业务项目,至此搭建完成,接下来,使用Web项目进行引用,

配置业务项目数据表映射

  <!-- 实体类映射库名称 -->
  <add key="DataMapper" value="Learun.Application.Mapping.dll,ShiQuan.Company.Mapping.dll"/>

配置业务项目数据库连接,添加配置功能菜单

运行系统效果

更多精彩,且听下回分解!