聲明:本系列為原創,分享本人現用框架,未經本人同意,禁止轉載!http://yuangang.cnblogs.com 希望大家好好一步一步做,所有的技術和項目,都毫無保留的提供,希望大家能自己跟著做一套,還有,請大家放心,只要大家喜歡,有人需要,絕對不會爛尾,我會堅持寫完~ 如果你感覺文章有幫助,點 ...
聲明:本系列為原創,分享本人現用框架,未經本人同意,禁止轉載!http://yuangang.cnblogs.com
希望大家好好一步一步做,所有的技術和項目,都毫無保留的提供,希望大家能自己跟著做一套,還有,請大家放心,只要大家喜歡,有人需要,絕對不會爛尾,我會堅持寫完~
如果你感覺文章有幫助,點一下推薦,讓更多的朋友參與進來,也是對本人勞動成果的鼓勵,謝謝大家!由於還要工作,所以基本都是犧牲午休時間來寫博客的,寫博客呢不是簡單的Ctrl+C、Ctrl+V,我是要挨著做一遍的,這也是對大家負責,所以有些時候更新不及時,或者問題沒有及時解答,希望大家諒解,再次感謝大家!!
因為我引用了許多以前積累的類庫,所以有些東西是重覆的(後來更新),有些東西是過時的,包括我寫的代碼,希望大家不要純粹的複製,取其精華去其糟粕>_<。
索引
【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目 目錄索引
簡述
簡單的客戶管理
項目準備
我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。
項目開始
一、資料庫設計
表名:SYS_BUSSINESSCUSTOMER
|
二、創建介面和實現類
1、我們在Service類庫下IService文件夾的SysManage文件夾下新建一個介面 IBussinessCustomerManage
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Service.IService 8 { 9 /// <summary> 10 /// 客戶管理介面 11 /// add yuangang by 2016-06-17 12 /// </summary> 13 public interface IBussinessCustomerManage:IRepository<Domain.SYS_BUSSINESSCUSTOMER> 14 { 15 } 16 }
2、我們在ServiceImp文件夾的SysManage文件夾下麵新建一個實現類 BussinessCustomerManage
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Service.ServiceImp 8 { 9 public class BussinessCustomerManage:RepositoryBase<Domain.SYS_BUSSINESSCUSTOMER>,IService.IBussinessCustomerManage 10 { 11 } 12 }
3、然後呢?對了,千萬別忘記,我們在Service類庫下麵的Service.xml配置一下
三、控制器和視圖
1、我們在/Areas/SysManage/Controllers 下新建一個控制器 BussinessCustomerController 繼承基礎控制器 BaseController
2、我們配置一下/Config/Controllers.xml 實現spring的註入
3、我們聲明一下這些容器
1 #region 聲明容器 2 /// <summary> 3 /// 公司客戶管理 4 /// </summary> 5 IBussinessCustomerManage BussinessCustomerManage { get; set; } 6 /// <summary> 7 /// 省市區管理 8 /// </summary> 9 ICodeAreaManage CodeAreaManage { get; set; } 10 /// <summary> 11 /// 大數據欄位管理 12 /// </summary> 13 IContentManage ContentManage { get; set; } 14 /// <summary> 15 /// 編碼管理 16 /// </summary> 17 ICodeManage CodeManage { get; set; } 18 #endregion
4、我們為Index添加視圖,並且加入驗證模塊 模塊別名為 BussinessCustomer 操作驗證為 View
1 /// <summary> 2 /// 客戶管理載入主頁 3 /// </summary> 4 /// <returns></returns> 5 [UserAuthorizeAttribute(ModuleAlias = "BussinessCustomer", OperaAction = "View")] 6 public ActionResult Index() 7 { 8 9 }
5、我們添加菜單連接
5.1 我們打開 系統管理中心 → 系統管理 → 模塊管理 添加一個頂部分類 【客戶管理中心】
5.2 我們在【客戶管理中心】 下新建一個 右側頂級菜單 【客戶管理】
5.3 我們在【客戶管理】菜單下 新建一個菜單 【客戶中心】 模塊別名: BussinessCustomer 模塊類型: 列表頁 模塊路徑: /Sys/BussinessCustomer
5.4 這樣我們是否就有菜單了呢?答案是否定的。因為我們為Index添加了許可權驗證 View 而我們這個模塊還沒有許可權。所以我們要創建許可權
為了快速,我們可以直接選擇 【初始化許可權】 會自動為我們添加 基本的操作許可權 如果我們需要其它許可權 比如:審核、發佈、下載、導出等,我們可以通過【創建新許可權】 來添加自定義操作許可權
OK,現在可以打開頁面了。
6、修改Index 輸出客戶列表
6.1 輸出省份列表和客戶類型列表
1 ViewData["ProvinceList"] = CodeAreaManage.LoadListAll(p => p.LEVELS == 1); 2 ViewBag.KHLX = this.CodeManage.LoadAll(p => p.CODETYPE == "LXRLX").OrderBy(p => p.SHOWORDER).ToList();
6.2 處理查詢參數 輸出客戶列表
1 /// <summary> 2 /// 客戶管理載入主頁 3 /// </summary> 4 /// <returns></returns> 5 [UserAuthorizeAttribute(ModuleAlias = "BussinessCustomer", OperaAction = "View")] 6 public ActionResult Index() 7 { 8 try 9 { 10 11 #region 處理查詢參數 12 //接收省份 13 string Province = Request.QueryString["Province"]; 14 ViewData["Province"] = Province; 15 //接收客戶類型 16 string CustomerStyle = Request.QueryString["CustomerStyle"]; 17 ViewData["CustomerStyle"] = CustomerStyle; 18 //文本框輸入查詢關鍵字 19 ViewBag.Search = base.keywords; 20 #endregion 21 22 ViewData["ProvinceList"] = CodeAreaManage.LoadListAll(p => p.LEVELS == 1); 23 ViewBag.KHLX = this.CodeManage.LoadAll(p => p.CODETYPE == "LXRLX").OrderBy(p => p.SHOWORDER).ToList(); 24 25 //輸出客戶分頁列表 26 return View(BindList(Province, CustomerStyle)); 27 } 28 catch (Exception e) 29 { 30 WriteLog(Common.Enums.enumOperator.Select, "客戶管理載入主頁:", e); 31 throw e.InnerException; 32 } 33 }
6.3 分頁查詢客戶列表方法
1 #region 幫助方法及其他控制器調用 2 /// <summary> 3 /// 分頁查詢公司客戶列表 4 /// </summary> 5 private Common.PageInfo BindList(string Province, string CustomerStyle) 6 { 7 //基礎數據(緩存) 8 var query = this.BussinessCustomerManage.LoadAll(null); 9 10 //非超級管理員只允許查看用戶所在部門客戶 11 if(!CurrentUser.IsAdmin) 12 { 13 query = query.Where(p => p.Fk_DepartId == CurrentUser.DptInfo.ID); 14 } 15 16 //客戶所在省份 17 if (!string.IsNullOrEmpty(Province)) 18 { 19 query = query.Where(p => p.CompanyProvince == Province); 20 } 21 22 //客戶類型 23 if (!string.IsNullOrEmpty(CustomerStyle)) 24 { 25 int styleId = int.Parse(CustomerStyle); 26 query = query.Where(p => p.CustomerStyle == styleId); 27 } 28 29 //查詢關鍵字 30 if (!string.IsNullOrEmpty(keywords)) 31 { 32 keywords = keywords.ToLower(); 33 query = query.Where(p => p.CompanyName.Contains(keywords) || p.ChargePersionName.Contains(keywords)); 34 } 35 //排序 36 query = query.OrderByDescending(p => p.UpdateDate).OrderByDescending(p => p.ID); 37 //分頁 38 var result = this.BussinessCustomerManage.Query(query, page, pagesize); 39 40 var list = result.List.Select(p => new 41 { 42 p.ID, 43 p.CompanyName, 44 p.IsValidate, 45 CompanyProvince = this.CodeAreaManage.Get(m => m.ID == p.CompanyProvince).NAME, 46 CompanyCity = this.CodeAreaManage.Get(m => m.ID == p.CompanyCity).NAME, 47 CompanyArea = this.CodeAreaManage.Get(m => m.ID == p.CompanyArea).NAME, 48 p.CompanyTel, 49 p.ChargePersionName, 50 p.CreateUser, 51 CreateDate=p.CreateDate.ToString("yyyy-MM-dd"), 52 p.CustomerStyle 53 54 55 }).ToList(); 56 57 return new Common.PageInfo(result.Index, result.PageSize, result.Count, Common.JsonConverter.JsonClass(list)); 58 }59 #endregion
6.4 頁面輸出
7、添加、修改、刪除客戶
7.1 載入客戶詳情 生成表單
1 /// <summary> 2 /// 載入詳情 3 /// </summary> 4 /// <param name="id"></param> 5 /// <returns></returns> 6 [UserAuthorizeAttribute(ModuleAlias = "BussinessCustomer", OperaAction = "Detail")] 7 public ActionResult Detail(int? id) 8 { 9 //初始化客戶 10 var entity = new Domain.SYS_BUSSINESSCUSTOMER() { ChargePersionSex = 1 }; 11 12 if(id!=null && id>0) 13 { 14 //客戶實體 15 entity = BussinessCustomerManage.Get(p => p.ID == id); 16 //公司介紹 17 ViewData["CompanyInstroduce"] = ContentManage.Get(p => p.FK_RELATIONID == entity.FK_RELATIONID && p.FK_TABLE == "SYS_BUSSINESSCUSTOMER") ?? new Domain.COM_CONTENT(); 18 } 19 20 //客戶類型 21 ViewBag.KHLX = this.CodeManage.LoadAll(p => p.CODETYPE == "LXRLX").OrderBy(p=>p.SHOWORDER).ToList(); 22 23 return View(entity); 24 }
7.2 Detail.cshtml
1 @{ 2 ViewBag.Title = "Detail"; 3 Layout = "~/Views/Shared/_Layout.cshtml"; 4 var content = ViewData["CompanyInstroduce"] == null ? new Domain.COM_CONTENT() : ViewData["CompanyInstroduce"] as Domain.COM_CONTENT; 5 } 6 @model Domain.SYS_BUSSINESSCUSTOMER 7 <style type="text/css"> 8 .gray-bg { 9 background-color: white; 10 } 11 </style> 12 @using (Ajax.BeginForm("Save", null, new AjaxOptions() 13 { 14 HttpMethod = "Post", 15 OnBegin = "SubAjax.Loading", 16 OnComplete = "SubAjax.Complate", 17 OnFailure = "SubAjax.Failure", 18 OnSuccess = "SubAjax.Success" 19 }, 20 new { @class = "form-horizontal dig-from", @role = "form" })) 21 { 22 @Html.HiddenFor(p => p.ID) 23 @Html.HiddenFor(p=>p.FK_RELATIONID) 24 @Html.HiddenFor(p=>p.Fk_DepartId) 25 @Html.HiddenFor(p => p.CreateUser) 26 @Html.HiddenFor(p => p.CreateDate) 27 @Html.Hidden("ContentId", content.ID) 28 <div class="wrapper wrapper-content animated fadeInUp"> 29 <div class="row"> 30 <div class="ibox-detail-title"> 31 <i class="fa fa-pencil-square-o"></i>添加/修改客戶 32 </div> 33 <div class="ibox-content"> 34 <div class="row"> 35 <div class="col-xs-6"> 36 <div class="form-group"> 37 <label class="col-xs-4 control-label">客戶名稱:</label> 38 <div class="col-xs-8"> 39 @Html.TextBoxFor(p => p.CompanyName, new { @class = "form-control", @placeholder = "請輸入客戶名稱", @datatype = "*", @nullmsg = "請輸入客戶名稱!", @errormsg = "請輸入客戶名稱!" }) 40 </div> 41 </div> 42 </div> 43 <div class="col-xs-6"> 44 <div class="form-group"> 45 <label class="col-xs-4 control-label">客戶類型:</label> 46 <div class="col-xs-8"> 47 <select name="CustomerStyle" class="form-control input-sm input-s-sm inline"> 48 @{ 49 foreach (var item in ViewBag.KHLX) 50 { 51 <option value="@item.CODEVALUE" @(Model.CustomerStyle!=null&&Model.CustomerStyle.ToString() == @item.CODEVALUE ? "selected" : "")>@item.NAMETEXT</option> 52 } 53 } 54 </select> 55 56 </div> 57 </div> 58 </div> 59 </div> 60 <div class="hr-line-dashed"></div> 61 <div class="row"> 62 <div class="col-xs-6"> 63 <div class="form-group"> 64 <label class="col-xs-4 control-label">公司電話:</label> 65 <div class="col-xs-8"> 66 @Html.TextBoxFor(p => p.CompanyTel, new { @class = "form-control", @placeholder = "請輸入公司電話" }) 67 </div> 68 </div> 69 </div> 70 <div class="col-xs-6"> 71 <div class="form-group"> 72 <label class="col-xs-4 control-label">公司網址:</label> 73 <div class="col-xs-8"> 74 @Html.TextBoxFor(p => p.CompanyWebSite, new { @class = "form-control", @placeholder = "請輸入公司網址" }) 75 </div> 76 </div> 77 </div> 78 </div> 79 <div class="hr-line-dashed"></div> 80 <div class="form-group"> 81 <label class="col-xs-2 control-label">所在地:</label> 82 <div class="col-xs-10"> 83 @Html.HiddenFor(p => p.CompanyProvince) 84 @Html.HiddenFor(p => p.CompanyCity) 85 @Html.HiddenFor(p => p.CompanyArea) 86 <select name="Province" id="Province" onchange="SelectCity('Province', 'City')" class="form-control input-sm input-s-sm inline"> 87 <option value="-1">--請選擇--</option> 88 </select> 89 <select name="City" id="City" onchange="SelectCountry('City', 'Area')" class="form-control input-sm input-s-sm inline"> 90 <option value="-1">--請選擇--</option> 91 </select> 92 <select name="Area" id="Area" onchange="SelectAreas('Area')" class="form-control input-sm input-s-sm inline"> 93 <option value="-1">--請選擇--</option> 94 </select> 95 </div> 96 </div> 97 <div class="hr-line-dashed"></div> 98 <div class="form-group"> 99 <label class="col-xs-2 control-label">通訊地址:</label> 100 <div class="col-xs-10"> 101 @Html.TextBoxFor(p => p.CompanyAddress, new { @class = "form-control", @placeholder = "請輸入通訊地址" }) 102 </div> 103 </div> 104 <div class="hr-line-dashed"></div> 105 <div class="row"> 106 <div class="col-xs-6"> 107 <div class="form-group"> 108 <label class="col-xs-4 control-label">負責人:</label> 109 <div class="col-xs-8"> 110 @Html.TextBoxFor(p => p.ChargePersionName, new { @class = "form-control", @placeholder = "請輸入負責人姓名", @datatype = "*", @nullmsg = "請輸入負責人姓名!", @errormsg = "請輸入負責人姓名!" }) 111 </div> 112 </div> 113 </div> 114 <div class="col-xs-6"> 115 <div class="form-group"> 116 <label class="col-xs-4 control-label">性別:</label> 117 <div class="col-xs-8"> 118 <label class="icheck_line"> 119 <input type="radio" name="ChargePersionSex" value="1" @(Model.ChargePersionSex != null && Model.ChargePersionSex ==