【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(7.2) 模塊管理,模塊的添加、修改、刪除

来源:http://www.cnblogs.com/yuangang/archive/2016/05/31/5543442.html
-Advertisement-
Play Games

聲明:本系列為原創,分享本人現用框架,未經本人同意,禁止轉載!http://yuangang.cnblogs.com 希望大家好好一步一步做,所有的技術和項目,都毫無保留的提供,希望大家能自己跟著做一套,還有,請大家放心,只要大家喜歡,有人需要,絕對不會爛尾,我會堅持寫完~ 如果你感覺文章有幫助,點 ...


聲明:本系列為原創,分享本人現用框架,未經本人同意,禁止轉載!http://yuangang.cnblogs.com

希望大家好好一步一步做,所有的技術和項目,都毫無保留的提供,希望大家能自己跟著做一套,還有,請大家放心,只要大家喜歡,有人需要,絕對不會爛尾,我會堅持寫完~

如果你感覺文章有幫助,點一下推薦,讓更多的朋友參與進來,也是對本人勞動成果的鼓勵,謝謝大家!由於還要工作,所以基本都是犧牲午休時間來寫博客的,寫博客呢不是簡單的Ctrl+C、Ctrl+V,我是要挨著做一遍的,這也是對大家負責,所以有些時候更新不及時,或者問題沒有及時解答,希望大家諒解,再次感謝大家!!

因為我引用了許多以前積累的類庫,所以有些東西是重覆的(後來更新),有些東西是過時的,包括我寫的代碼,希望大家不要純粹的複製,取其精華去其糟粕>_<。

在項目最後我會把每個部分、每個階段的Demo提供下載給大家,其實,如果跟著做完,並且剔除掉了我代碼不好的地方,你也不需要這些Demo了,是吧~

索引

 【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(1)搭建MVC環境 註冊區域

 【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(2)創建資料庫和數據模型

 【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(3)公共基礎數據操作類 RepositoryBase

 【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(4)對前面的一些問題彙總和總結

 【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(5.1) 登錄功能的實現,開始接觸Spring IOC、DI

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(5.2) 登錄功能的實現,介面註入、log4net的使用

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(5.3) 登錄功能的實現,豐富數據表、建立關聯

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(5.4) 登錄功能的實現,創建與登錄用戶相關的介面和實現類

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(5.5) 登錄功能的實現,完善登錄功能

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(6) 控制器基類 主要做登錄用戶、許可權認證、日誌記錄等工作

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目(7.1) 模塊管理,驗證許可權,展示模塊列表

簡述

今天我們來做模塊管理的 添加、修改、刪除

項目準備

我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5

希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。

項目開始

重要事情說3遍:從上一篇開始,用到的新技術不多,基本都是怎麼用前面講到的,基本不怎麼貼代碼,希望大家自己動手敲、一定要動手敲!動手敲!!動手敲!!!

先給大家貼一下效果(頁面排版稍微有點問題,還沒改,保存模塊之後 頁面應該自動刷新一下 js 控制也沒寫 大家主要看看功能 這些小的問題 自己修改一下就行了)

 

 

一、模塊詳情、添加/修改模塊

我們添加一個Detail視圖 傳遞一個int? 類型的ID (如果有ID傳入 那就是展示模塊詳情和修改模塊,如果沒有ID傳入 那就是新建一個模塊了

我們是想這樣的,查看詳情 添加 修改,我們都用這一個頁面,如果有ID傳入,那麼我們就展示模塊信息(查看),並且填充內容到表單(修改),如果沒有ID傳入,那就實例化一個空的模型並且填充表單(添加)

 

 

先寫一個try{}catch(){}

 

 

我們New 一個新的模塊實例 傳遞給視圖頁 並初始化一些參數

 

 

因為,因為,因為,我們在Index視圖中 有個 操作 添加子模塊(7.1講了 因為沒有添加許可權 所以[添加子模塊] 被 Remove掉了),因為是無限級分級的,所以點擊添加子模塊 可以方便用戶在當前模塊下新建子模塊,就不用每次都要選擇上級模塊和系統了

 

 

二、Detail 模塊詳情視圖頁

OK,我們轉到Detail的視圖頁(大家不要糾結我的頁面樣式~~~)

 

1、首先,我們接收 傳遞的 實體模型

 

2、我們展示模塊信息,並且創建保存表單

 

 

三、保存模塊

許可權的操作類型我們設為 添加和修改

 

我們接收傳遞過來的 實體模型 entity

1、定義變數 isEdit 實例化JsonHelper類

1  bool isEdit = false;
2  var json = new JsonHelper() { Msg = "保存成功", Status = "n" };

2、try catch ..

1             try
2             {
3              
4             }
5             catch (Exception e)
6             {
7                 json.Msg = "保存模塊發生內部錯誤!";
8                 WriteLog(Common.Enums.enumOperator.None, "保存模塊:", e);
9             }

 3、判斷接收的實體模型是否為Null

1                 if (entity != null)
2                 {
3                     
4                 }
5                 else
6                 {
7                     json.Msg = "未找到需要保存的模塊";
8                 }

4、如果 實體模型不為NULL 我們用正則驗證模塊別名是否符合規範

1                     //驗證
2                     if (!Regex.IsMatch(entity.ALIAS, @"^[A-Za-z0-9]{1,20}$"))
3                     {
4                         json.Msg = "模塊別名只能以字母數字組成,長度不能超過20個字元";
5                         return Json(json);
6                     }

5、根據模塊的ParentId設置模塊級別

1                     //級別加1,一級模塊預設0
2                     if (entity.PARENTID <= 0)
3                     {
4                         entity.LEVELS = 0;
5                     }
6                     else
7                     {
8                         entity.LEVELS = this.ModuleManage.Get(p => p.ID == entity.PARENTID).LEVELS + 1;                       
9                     }

6、如果是添加模塊 則 初始化模塊的創建信息和更新信息,否則 更新模塊的更新信息

 1                     //添加
 2                     if (entity.ID <= 0)
 3                     {
 4                         entity.CREATEDATE = DateTime.Now;
 5                         entity.CREATEUSER = this.CurrentUser.Name;
 6                         entity.UPDATEDATE = DateTime.Now;
 7                         entity.UPDATEUSER = this.CurrentUser.Name;
 8                     }
 9                     else //修改
10                     {
11                         entity.UPDATEDATE = DateTime.Now;
12                         entity.UPDATEUSER = this.CurrentUser.Name;
13                         isEdit = true;
14                     }

7、判斷模塊別名同系統下是否重名、同父模塊下模塊名稱是否重名

 1                   //模塊別名同系統下不能重覆
 2                     if (this.ModuleManage.IsExist(p => p.FK_BELONGSYSTEM == entity.FK_BELONGSYSTEM && p.ALIAS == entity.ALIAS && p.ID != entity.ID))
 3                     {
 4                         json.Msg = "同系統下模塊別名不能重覆";
 5                         return Json(json);
 6                     }
 7                     //判斷同一個父模塊下,是否重名 
 8                     if (!this.ModuleManage.IsExist(p => p.PARENTID == entity.PARENTID && p.FK_BELONGSYSTEM == entity.FK_BELONGSYSTEM && p.NAME == entity.NAME && p.ID != entity.ID))
 9                     {
10                         
11                     }
12                     else
13                     {
14                         json.Msg = "模塊" + entity.NAME + "已存在,不能重覆添加";
15                     }

8、執行添加或修改模塊

1                        if (this.ModuleManage.SaveOrUpdate(entity, isEdit))
2                         {
3                             
4                             json.Status = "y";
5                         }
6                         else
7                         {
8                             json.Msg = "保存失敗";
9                         }

9、如果模塊修改成功,我們變更下級模塊的級別

1                            //變更下級模塊的級別
2                             if (isEdit)
3                             {
4                                 this.ModuleManage.MoreModifyModule(entity.ID, Convert.ToInt32(entity.LEVELS));
5                             }

 

這樣,添加和修改功能就完成了。

 

四、刪除模塊

首先,我們判斷idList是否為空

 1             JsonHelper json = new JsonHelper() { Msg = "刪除模塊成功", ReUrl = "", Status = "n" };
 2             try
 3             {
 4                 if (!string.IsNullOrEmpty(idList))
 5                 {
 6                     
 7                 }
 8                 else
 9                 {
10                     json.Msg = "未找到要刪除的模塊";
11                 }
12                 WriteLog(Common.Enums.enumOperator.Remove, "刪除模塊,結果:" + json.Msg, Common.Enums.enumLog4net.WARN);
13             }
14             catch (Exception e)
15             {
16                 json.Msg = "刪除模塊發生內部錯誤!";
17                 WriteLog(Common.Enums.enumOperator.Remove, "刪除模塊:", e);
18             }
19             return Json(json);

如果不為空,我們把idList轉為int 數組 idlist1

1 var idlist1 = idList.Trim(',').Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(p => int.Parse(p)).ToList();

在執行刪除之前,我們要進行兩步判斷,首先判斷模塊是否存在許可權

1                    //判斷許可權裡面有沒有
2                     if (!this.PermissionManage.IsExist(p => idlist1.Any(e => e == p.MODULEID)))
3                     {
4                         
5                     }
6                     else
7                     {
8                         json.Msg = "該模塊下有許可權節點,不能刪除";
9                     }

然後判斷,模塊下是否有子模塊

1                         //存在子模塊與否
2                         if (!this.ModuleManage.IsExist(p => idlist1.Any(e => e == p.PARENTID)))
3                         {
4                             
5                         }
6                         else
7                         {
8                             json.Msg = "該模塊下有子模塊,不能刪除";
9                         }

 執行刪除

1 this.ModuleManage.Delete(p => idlist1.Any(e => e == p.ID));
2 json.Status = "y";

 

 

原創文章 轉載請尊重勞動成果 http://yuangang.cnblogs.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文實現的需求是: A.通過web頁面啟動winform程式; B.將頁面的參數傳遞給winform程式; C.winform程式已經啟動並正在運行時,從web頁面不能重新啟動winform程式, 只是當傳入winform程式的參數更改時,winform上顯示的數據作出相應的更新。 具體實現如下: ...
  • jquery使用手冊:http://www.eduyo.com/doc/jquery/cheatsheet.html addClass 樣式: <style> .textRed { color:red; } </style> 使用: $("#th_1").addClass("textRed"); R ...
  • 這兩天做東西,業務上有個特殊的需求,在用戶訪問頁面的時候,針對某一行代碼進行控制,按照概率來進行顯示,我做的是針對當前頁面的曝光進行處理,曝光代碼是第三方的,頁面上只要有這段代碼就算是執行了這段曝光代碼,所以才寫了這個輪詢的一個方法,這個方法可以根據自己的需求修改,下麵我把這個方法全部帖出來: 這個 ...
  • 我們在寫mvc的時候,經常會配置各種url模板,比如controller,action,id 組合模式,其實呢,我們還可以對這三個參數進行單獨的配置,採用的方式自然 就是MapRoute中的constraints屬性。 一:簡單的正則匹配 正則匹配算是最最簡單的一個方法,比如針對上面路由中id的值, ...
  • 網站是使用BootStrap框架實現,當站點發佈至伺服器(Windows Server 2008 R2)IIS之後,顯示下麵的異常: Insus.NET跑至相關目錄之下檢查,這些字體的文件是確實存在的。為什麼這樣呢? 令Insus.NET想起前些日子,解決視頻PM4的問題《在IIS啟用MP4》htt ...
  • 推薦:http://www.cnblogs.com/roucheng/p/dushubiji.html ...
  • N年前我們是這樣來 拼接查詢字元串的: 現在我們使用linq來實現上邊的代碼: 推薦:http://www.cnblogs.com/roucheng/p/dushubiji.html ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...