ASP MVC管理类快速开发

07过去也很久了,框架体系似乎也就这样了。那会儿ibatis,spring,structs,sigmagrid搞定,好像除了ibatis改了名字,前端开始html5(用控件,也关心不多,也不属于程序员详细关心),真没多少变化。那会儿的工业架构倒是目前很多大数据互联网流行的架构(这个这会儿用不上,闲扯一下)。

摆在这也就是些增删改查的东西...

定位

一个为过检的东西,原则 —— 看的过去,省(时,力);

因此尽量维持使用微软的东西,entity framework,mvc,ace不错bootstrap、jquery;找了一圈grid还是只有用jqgrid;为了继续省,还凑合顺眼,定位单个业务页面内是ajax操作,页面间就不管了,全输出。

说一下数据库哈 —— 现成的表,超级拉拉...拉到什么程度就不说了,当然也有他的历史因素。

为了继续省,登录页干脆就不做了,弄成basic登录好了;

上点产物
代码往下继续——

(登录示意图)

(编辑示意图)

(搜索示意图)

(系统状态图)

好,

go coding...ing

实现基本认证:LAuthenticateAttribute : FilterAttribute, IAuthenticationFilter,抄来基本认证代码,加上自己的登录判断,OK搞定;

写个增删该查通用Controller:

  1 [LAuthenticate]
  2     public abstract class EntityControllerBase<T> : Controller where T :class
  3     {
  4         private readonly STGps_DataEntities _db = new STGps_DataEntities();
  5
  6         public STGps_DataEntities Db
  7         {
  8             get { return _db; }
  9         }
 10
 11         public DbSet<T> Table
 12         {
 13             get { return _db.Set<T>(); }
 14         }
 15
 16         //protected System.Data.Entity.DbSet<T> DbSet { get;private set; }
 17         public string PrimaryKey { get; private set; }
 18
 19         protected EntityControllerBase(string primaryKey):base()
 20         {PrimaryKey = primaryKey;}
 21
 22         // GET: Vehicle
 23         public virtual ActionResult Index()
 24         {
 25             return View();
 26         }
 27
 28         // GET: Vehicle
 29         public virtual ActionResult List(GridSettings grid)
 30         {
 31             return List<T>(grid, null);
 32         }
 33
 34         // GET: Vehicle
 35         protected ActionResult List<TFormatEntities>(GridSettings grid, Func<IQueryable<T>, IQueryable<TFormatEntities>> formatFun) where TFormatEntities : class
 36         {
 37             IQueryable<T> query = Table;
 38             //filtring
 39             if (grid.IsSearch)
 40             {
 41                 //And
 42                 if (grid.Where.groupOp == "AND")
 43                     foreach (var rule in grid.Where.rules)
 44                         query = query.Where<T>(rule.field, rule.data, rule.op);
 45                 else
 46                 {
 47                     //Or
 48                     var temp = (new List<T>()).AsQueryable();
 49                     foreach (var rule in grid.Where.rules)
 50                     {
 51                         var t = query.Where<T>(rule.field, rule.data, rule.op);
 52                         temp = temp.Concat<T>(t);
 53                     }
 54                     //remove repeating records
 55                     //query = temp.Distinct<T>();
 56                 }
 57             }
 58             //sorting
 59             query = query.OrderBy<T>(grid.SortColumn, grid.SortOrder);
 60             //count
 61             var count = query.Count();
 62             //paging
 63             var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize);
 64             //converting in grid format
 65             var result = new
 66             {
 67                 total = (int)Math.Ceiling((double)count / grid.PageSize),
 68                 page = grid.PageIndex,
 69                 records = count,
 70                 rows = formatFun == null ? data as IQueryable : formatFun.Invoke(data),
 71             };
 72
 73             //convert to JSON and return to client
 74             return new LJsonResult(result, JsonRequestBehavior.AllowGet);
 75         }
 76
 77         protected virtual IQueryable<T> FormatEntities(IQueryable<T> data)
 78         {
 79             return data;
 80         }
 81
 82         public ActionResult Edit(T entity, string oper, string id)
 83         {
 84             switch (oper)
 85             {
 86                 case "add":
 87                     return Add(entity);
 88                 case "del":
 89                     return Delete(id);
 90                 case "edit":
 91                     return Modify(entity);
 92             }
 93             return new HttpStatusCodeResult(HttpStatusCode.NotFound);
 94         }
 95
 96         protected virtual HttpStatusCodeResult Add(T entity)
 97         {
 98             try
 99             {
100                 Table.Add(entity);
101                 _db.Entry<T>(entity).State = EntityState.Added;
102                 _db.SaveChanges();
103             }
104             catch (Exception ex)
105             {
106                 return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
107             }
108             return new HttpStatusCodeResult(HttpStatusCode.Created);
109         }
110
111         protected virtual HttpStatusCodeResult Modify(T entity)
112         {
113             try
114             {
115                 //var id0 = entity.GetType().GetProperty(PrimaryKey).GetValue(entity);
116                 //_db.Set<T>().Attach(entity);
117                 _db.Entry(entity).State = EntityState.Modified;
118                 _db.SaveChanges();
119             }
120             catch (Exception ex)
121             {
122                 return new HttpStatusCodeResult(HttpStatusCode.InternalServerError,ex.Message);
123             }
124             return new HttpStatusCodeResult(HttpStatusCode.OK);
125         }
126
127         protected virtual HttpStatusCodeResult Delete(string id)
128         {
129             try
130             {
131                 var ids = id.Split(‘,‘);
132                 ids.ForEach(t => _db.Database.ExecuteSqlCommand(string.Format("Delete {0} where {1}[email protected]", typeof(T).Name, PrimaryKey), new SqlParameter("@id", t)));
133             }
134             catch (Exception ex)
135             {
136                 return new HttpStatusCodeResult(HttpStatusCode.InternalServerError,ex.Message);
137             }
138             return new HttpStatusCodeResult(HttpStatusCode.OK);
139         }
140
141     }

这里PrimaryKey是不得不专门为这破旧的数据表留一腿;

List()是标准Entity输出,那复合怎么搞定?

—— List<TFormatEntities>这个函数正是专门为处理这个问题留出来的;

比如下面情况——

 1         public virtual ActionResult ListExtDevice(GridSettings grid)
 2         {
 3             return List(grid, sims => sims.Select(t => new SIMExtDevice
 4             {
 5                 Area = t.Area,
 6                 SIM1 = t.SIM1,
 7                 SIMID = t.SIMID,
 8                 OpenDate = t.OpenDate,
 9                 Status = t.Status,
10                 Type = t.Type,
11                 DeviceId = Db.tblTerminalManage.FirstOrDefault(f => f.TerminalTel == t.SIM1).ID,
12             }));
13         }

还是挺方便快捷的,SIMExtDevice这个也用不了什么代码 —— SIMExtDevice:SIM,然后加上复合字段Property即可;

增删该查就搞毕(不是毕姥爷)!

好像差不多了,View套上ACE,JQGrid(留个备注http://www.trirand.com/jqgridwiki/doku.php?id=wiki:jqgriddocs,说实话这比起Sigmagrid还是后起之物,真心没Sigmagrid好)...

其余的等等什么什么Controller、View都是细致的体力活,同志们加油吧~~

如果非要处理注销的话,basic好像没什么好办法;

chrome经过服务端定向登录错误是可以的,ie就不行了,不过还好ie有他的特殊接口。

这事反正有点扯淡,我为过检,所以省了关闭浏览器KO。

时间: 2024-10-10 12:57:15

ASP MVC管理类快速开发的相关文章

52abp框架asp.net core &amp; Angular快速开发实战视频教程

课程标题 52abp框架asp.net core & Angular全栈开发实战视频课程 课程简介 从零开始学 52ABP企业开发框架,企业项目是如何开发和技术选型,代码如何管理,团队协同开发.Angular和.net core是如何结合的,当前处于迷茫或者 技术进入瓶颈期的程序员,可以知道一条如何往中高级程序员发展的道路.总的来说52ABP是一个整合了前后端的强力框架,基于DDD(领域驱动设计)思想的强大稳定的WEB应用框架! 面向人群 在职的.NET 程序猿(具备C# .net 基础,热爱互

Bootstrap框架写的后台管理模板,快速开发

Bootstrap框架写的后台管理模板     [MATRI ADMIN] 为了解决浏览器兼容问题,公司前段UI准备使用Bootstrap框架写的模板,便于后期项目过检时,浏览器不兼容出现的不必要的麻烦 首先做一些简单的介绍 JavaScript 插件可以单个引入(使用 Bootstrap 提供的单个 *.js 文件),或者一次性全部引入(使用 bootstrap.js 或压缩版的 bootstrap.min.js). 建议使用压缩版的 JavaScript 文件 bootstrap.js 和 

如何提高码农产量,基于ASP.NET MVC的敏捷开发框架开发随笔一

公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个敏捷开发框架. 我们主要的业务是做OA.CRM.ERP一类的管理系统,一个通用的后台搭出来,再配合一些快速开发的组件开发效率能提高很多. 另外老板一再强调要支持APP开发,一次开发能部署到安卓和IOS上. 作为开篇之作,先介绍一下该框架的功能点及技术点,后续的文章再按功能详细讲解. 献上<在线体验Demo地址>希望大家也能从中得到一些启发. 体验地址:http://www.learun.cn:8090 . 用户名:Syste

Asp.Net快速开发平台(敏捷开发框架)

前言:敏捷开发框架的名称由来呢? 我希望开发项目可以结构化的,轻量级的,就像敏捷开发团队一样的高效快速,通过它可以快速开发一个项目. 1:什么是敏捷开发框架? 答:敏捷开发框架是一款Asp.Net轻量级智能快速开发平台(框架),可以帮助您解决项目中90%的重复工作,让您更多关注业务逻辑.由于本身轻量级特性,可根据自身需求二次开发想要的功能. 敏捷开发框架可以让开发者更加专注实现项目的业务逻辑.项目本身集成了"代码生成器",实现了一个单表所有的CRUD功能以及查询功能,只需要一分钟生成代

开发指南专题专题一: JEECG微云快速开发平台前言

JEECG微云快速开发平台-前言 1. 前言 1.1. 技术背景 随着WEB UI 框架(EasyUI/Jquery UI/Ext/DWZ)等的逐渐成熟,系统界面逐渐实现统一化,代码生成器也可以生成统一规范的界面! 代码生成+手工MERGE半智能开发将是新的趋势,生成的代码可节省50%工作量,快速提高开发效率! 1.2. 平台介绍 JEECG [J2EE  Code Generation] 是一款基于代码生成器的微信快速开发平台,采用代码生成+手工MERGE半智能开发模式, 可以帮助解决Java

基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!

基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软件行业也不例外.但是需求的一再变动,架构和业务功能的一改再改,往往使得软件的开发事倍功半.软件行业急需突破现现状,所以快速开发框架就这么应运而生了.但是市面上快速开发框架种类繁多,今天我给大家带来的是一套界面风格简洁大方.多业务功能.基于ASP.NET+MVC的快速开发框架. 体验地址我会在下文附上

使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:公众号后台系统和数据都基本准备妥当了,可以来分享下我是如何开发本微信公众号的后台系统了. 首先说说我对公众号后台的简单需求: 读者可以方便的获取历史文章 可以通过关键字查找文章 可以通过发表日期查找文章 基于这样的需求,也基于我的公众号可用的接口(由于是没有微信认证的订阅号,可用接口少得可怜),故设计了如下的实现方案: 后台用一个数据源保存所有文章的信息,具体的字段包含了微信自动回复所需要的必

ASP.NET MVC 多语言实现技巧 最简、最易维护和最快速开发

说说传统做法的缺点 1.做过多语言的都知道这玩意儿太花时间 2.多语言架构一般使用资源文件.XML或者存储数据库来实现.这样就在一定程序上降低了性能 3.页面的可读性变差,需要和资源文件进行来回切换 4.修改麻烦 5.样式兼容难调 6.JS如何处理 另类做法 传统做法看上去高大上实质上唯护起来确实很费力,所以有一部分人就采用了另类做法直接做二套页面.总体来说上面一种和下面一种可以说半斤八两. 上面一种显的有点档次,但维护成本并不低,页面可读性差,样式兼容难调,唯一优点是页面代码逻辑只有一套,只在

SNF快速开发平台3.0之--MVC 打印解决方案

SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常用这个方法. 按规定要求放于指定位置:Areas->Sys->Reports->BaseRole.mrt 打开对应的页面功能,点击打印即可,也可以在线编辑报表 第一步:配置打印按钮 第二步:配置打印方法 //打印 this.printClick = function () { snf.ope