【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

声明:本系列为原创,分享本人现用框架,未经本人同意,禁止转载!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 控制也没写 大家主要看看功能 这些小的问题 自己修改一下就行了)

 

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

 

一、模块详情、添加/修改模块

我们添加一个Detail视图 传递一个int? 类型的ID (如果有ID传入 那就是展示模块详情和修改模块,如果没有ID传入 那就是新建一个模块了

我们是想这样的,查看详情 添加 修改,我们都用这一个页面,如果有ID传入,那么我们就展示模块信息(查看),并且填充内容到表单(修改),如果没有ID传入,那就实例化一个空的模型并且填充表单(添加)

 

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

 

先写一个try{}catch(){}

 

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

 

我们New 一个新的模块实例 传递给视图页 并初始化一些参数

 

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

 

因为,因为,因为,我们在Index视图中 有个 操作 添加子模块(7.1讲了 因为没有添加权限 所以[添加子模块] 被 Remove掉了),因为是无限级分级的,所以点击添加子模块 可以方便用户在当前模块下新建子模块,就不用每次都要选择上级模块和系统了

 

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

 

二、Detail 模块详情视图页

OK,我们转到Detail的视图页(大家不要纠结我的页面样式~~~)

 

1、首先,我们接收 传递的 实体模型

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

 

2、我们展示模块信息,并且创建保存表单

 【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

 

三、保存模块

权限的操作类型我们设为 添加和修改

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.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                             }

 

这样,添加和修改功能就完成了。

 

四、删除模块

【无私分享:从入门到精通ASP.NET MVC】从零开始,一起搭框架、做项目(7.2) 模块管理,模块的添加、修改、删除

首先,我们判断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

20楼肩桩
上一篇大家遇到这个问题吗
Re: 果冻布丁喜之郎
@肩桩,注入 注入 配置xml
19楼bluewaves
楼主威武,继续拜读中!
Re: 果冻布丁喜之郎
@bluewaves,感谢支持~~~
18楼kismet82
养肥了看,楼主加油。。 (来自博客园v3.3.2)
Re: 果冻布丁喜之郎
@kismet82,很快就肥了...
17楼iSuwei
博主,我跟着做到5.2那就报错啦。。。。
Re: 果冻布丁喜之郎
@iSuwei,⊙0⊙
16楼GavinJun
也五块钱卖我一套呗,嘿嘿
Re: 果冻布丁喜之郎
@GavinJun,UI么 门素材充了5块钱积分 下的,不过基本只用到了bootstrap的东西 其它的东西 我都修改了
15楼小橘子o2o
哈,先赞再看~
Re: 果冻布丁喜之郎
@小橘子o2o,哈哈,谢谢~
14楼蓝色的风虫
加油啊
Re: 果冻布丁喜之郎
@蓝色的风虫,共勉
13楼名字要长七个字
H+??
Re: 果冻布丁喜之郎
@名字要长七个字,模板是H+ 推荐大家用BUI
Re: 果冻布丁喜之郎
@名字要长七个字,百度随便搜的
12楼张学友丶
赞一个!
Re: 果冻布丁喜之郎
@张学友丶,感谢支持~~~
11楼小四四
感谢楼主无私的分享
Re: 果冻布丁喜之郎
@小四四,希望能有帮助
10楼amonker
我做的全面好多错误 已经没有继续下去的动力了
Re: 果冻布丁喜之郎
@amonker,如果一路下来一点错误没有 那就没意义了
9楼mqzzzz
求LZ分享一下登陆模板
8楼-Stephen
MARK
7楼一叶飘雪
楼主用什么后台框架,求解?
Re: 果冻布丁喜之郎
@一叶飘雪,框架还是模板?
6楼坚持的孤独
楼主你这个页面是 一个中国前端大牛翻译加修改的 国外一个模板的 他在中国买900多一套 我都是 看看不敢用 呵呵
Re: 果冻布丁喜之郎
@坚持的孤独,这有啥不敢用的 他自己写的样式我一句没用 全是bootstrap的
5楼CatherineCynthia
LZ 好人啊
Re: 果冻布丁喜之郎
@CatherineCynthia,好人一生平安 O(∩_∩)O
4楼坚持的孤独
群主 你这个后台页面模板是授权的嘛?还是直接网上下载的,我也想用但是一直不敢就自己动手写了
Re: 果冻布丁喜之郎
@坚持的孤独,花了5块钱 买的
3楼nommy
谢谢你的分享,,谢谢!
Re: 果冻布丁喜之郎
@nommy,太客气啦,http://www.cnblogs.com/yuangang/p/5545816.html
2楼C#老肖
老兄弟,把你框架源码借我看看,好吗?求你了。。。私我,
Re: 果冻布丁喜之郎
@C#老肖,我全部都贴出源码来了
1楼Amonk
楼主 手动插数据好大主外键 哈哈 累死我啦 终于搞好了
Re: 果冻布丁喜之郎
@Amonk,哈哈 加油~~