利用Linq2Sql+Juqery实现通用查询功能


背景

  在利用Asp.Net开发信息系统时,我们经常需要显示一些清单页面,清单页面的功能一般是上方有一些自定义查询功能区,下方是数据表格。下图就是一个比较典型的例子:

  针对上面这样的一个页面,查询条件可选的字段都是程序开发时固定死的,用户可以选择的范围有限,用户体验不好。那么我们能不能提供一个像下图所示的自定义通用查询功能呢?

  功能需求

  一般来说,通用查询模块至少要包含以下的功能:

  不能是IE Only 的

  查询字段包含文本型、日期型、下拉框型、数字型。

  查询条件可自定义。

  查询值做录入验证。

  查询关系查自定义。

  用户可以配置查询条件的字段、条件、查询值、查询关系。

  用户可以手动增加、删除查询条件。

  用户可以将当前查询条件保存到数据库中,以便以后查询。

  用户可以删除以前保存的历史记录

  解决方案

  针对上面提出的功能需求,我想到的解决方案是利用Asp.Net + jQuery+ Linq2Sql来完成。jQuery用来进行前台js操作,前台和后台的交互采用ajax进行以提高用户体验。保存查询历史的数据库采用sql server2005,然后采用linq2sql作为orm框架以减少编码工作量。

  下面是解决方案的一些关键示意图

  ListMapping表:存储每个页面上的自定义查询条件,如有哪些字段,字段的中文名称、数据库字段名、数据库类型是什么。

  QueryHistroy表:查询历史记录表。

  Calendar.js:当用户需要录入日期型值时要用到的日期控件。

  jquery.js:用来处理dom,ajax,采用的1.2.6版本。

  jquery_Intellisense.js:jquery用来在visual studio 2008中智能提示要用到的文件。

  public.js:其它的一些公用js方法集合。

  cookie.js:jquery插件,用来操作cookie。

  MessageBox.js: jquery查询,用来实现具有lightbox效果(关机效果)的对话框。

  GeneralSearch.js: 实现通用查询所要用到的js方法集合。

  GeneralSearchAjaxHandler.ashx:实现通用查询所要用到的所有后台方法集合,利用ashx页面缩短页面的生命周期,提高响应速度。

  Default.aspx:通用查询的测试界面。

  使用界面

  (主界面)

  (具有关机效果的保存查询界面)

  (执行查询界面)

  (取消查询界面)

  当前版本的不足

  通用查询模块是我从去年做的一个项目中抽取出来的,当时做的时候比较仓促,所以还有一些缺点,总体来说目前主要存在以下的不足

  模块界面不美观

  支持的查询条件比较少(当时根据项目需要只处理了等于、类似、大于、小于几个,但后期扩充起来难度不大)

  需要在使用本模块的aspx页面设置ValidateRequest属性为false,原因是页面在执行_doPostBack()前,需要先将通用查询的html保存到隐藏控件中,以便PostBack后,重新加载,这点一直没有想到比较好的解决办法,有知道的朋友请指点一下。

  关于源码

  源码目前还没有完全整理好,大概会利用本周末前的午休时间整理好,所以有需要的朋友可以留下mail地址,或是直接在twitter(@zhangronghua)上发消息给我吧


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3