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

背景

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

image

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

image

功能需求

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

  • 不能是IE Only 的
  • 查询字段包含文本型、日期型、下拉框型、数字型。
  • 查询条件可自定义。
  • 查询值做录入验证。
  • 查询关系查自定义。
  • 用户可以配置查询条件的字段、条件、查询值、查询关系。
  • 用户可以手动增加、删除查询条件。
  • 用户可以将当前查询条件保存到数据库中,以便以后查询。
  • 用户可以删除以前保存的历史记录

解决方案

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

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

image

image

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:通用查询的测试界面。

使用界面

image

(主界面)

image

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

image

(执行查询界面)

image

(取消查询界面)

当前版本的不足

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

  • 模块界面不美观
  • 支持的查询条件比较少(当时根据项目需要只处理了等于、类似、大于、小于几个,但后期扩充起来难度不大)
  • 需要在使用本模块的aspx页面设置ValidateRequest属性为false,原因是页面在执行_doPostBack()前,需要先将通用查询的html保存到隐藏控件中,以便PostBack后,重新加载,这点一直没有想到比较好的解决办法,有知道的朋友请指点一下。

关于源码

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

参考资料

《Linq in Action》

jQuery中文手册

DHTML Calendar

JQuery实现自定义对话框

让VS2008支持最新版的JQuery智能提示

浅谈ashx文件 

作者:张荣华
出处:http://zhangronghua.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2010-06-23 17:23  gllg  阅读(433)  评论(2编辑  收藏  举报