背景

在利用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)上发消息给我吧。

参考资料

《Linq in Action》

jQuery中文手册

DHTML Calendar

JQuery实现自定义对话框

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

浅谈ashx文件

作者:张荣华
出处:http://zhangronghua.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/gllgsoft/archive/2010/06/23/1763810.html

利用Linq2Sql+Juqery实现通用查询功能相关推荐

  1. php可以打印一个页面,利用html实现分页打印功能的实例详解

    本篇介绍利用html实现分页打印功能的实例详解,有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的. 页面打印 /* 应用这个样式的在打印时隐藏 */ .noPrint { d ...

  2. redisson的锁的类型_绝对干货:利用redisson完成分布式锁功能

    在单体架构中,我们使用synchronize或者Lock就能完成上锁同步的操作,但是这些在分布式,微服务的今天,失去了作用. 分布式锁的实现一般有三种解决方案:基于数据库表实现 基于缓存实现,比如re ...

  3. android mysql 搜索功能_android利用数据库实现搜索联想功能

    [实例简介] android利用数据库实现搜索联想功能.主要实现的效果是和google百度搜索一样,实现联想功能. [实例截图] [核心代码] 4e431bd8-d287-4028-8476-7510 ...

  4. phantomjsjava_Java利用Phantomjs实现生成图片的功能

    今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下! PhantomJS简介 首先,什么是PhantomJS? 根据官网介绍: PhantomJS ...

  5. java 实现网络通信_利用Java怎么样实现网络通信功能

    利用Java怎么样实现网络通信功能 发布时间:2020-11-20 15:19:04 来源:亿速云 阅读:72 作者:Leah 利用Java怎么样实现网络通信功能?相信很多没有经验的人对此束手无策,为 ...

  6. 我的Android进阶之旅------Android利用Sensor(传感器)实现水平仪功能的小例

    这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端.    利用方向传感器返回的第一个参数,实现了一个指南针小应用.   ...

  7. python基于opencv的手势识别_怎么在Python3.5 中利用OpenCV实现一个手势识别功能

    怎么在Python3.5 中利用OpenCV实现一个手势识别功能 发布时间:2020-12-22 11:56:32 来源:亿速云 阅读:67 作者:Leah 怎么在Python3.5 中利用OpenC ...

  8. mysql xp cmdshell_LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句...

    LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件 ...

  9. 【PHP学习】—利用ajax原理实现登录功能(八)

    [PHP学习]-利用ajax原理实现登录功能(八) 通过学习上篇文章我们发现这种方法存在了一定的缺陷,利用页面跳转,HTML页面访问服务器,要等待服务器响应,账号密码输入错误后,还要回退页面重新输入账 ...

最新文章

  1. Linux的文件管理命令
  2. android系统应用程序,Android系统应用程序基本概念解读
  3. 深入浅出 SpringMVC - 2 提升篇
  4. 1.16 静态内部类
  5. 在真实工作中的编程是怎么样的,与学校里有什么不同?
  6. 动态规划 —— 状压 DP
  7. 更改lnmp安装后的MySQL密码方法
  8. Android UI开发第三十九篇——Tab界面实现汇总及比较
  9. 网站设计中很重要的概念div+浮动
  10. python学习手册-Python 重点知识整理(基于Python学习手册第四版)
  11. ti processor sdk linux am335x evm /bin/setup-minicom.sh hacking
  12. Node.js系列——(4)优势及场景
  13. Redis单线程模型详解
  14. G.8032 ERPS 轻松强固网络安全!
  15. 网上申请办理杭州市民卡
  16. 敏捷项目管理的前世今生及应用-Part 2(之3355)
  17. hmmer建立hmmscan
  18. Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法
  19. pip install kaggle 出现 【网络不可达】?
  20. windows 程序设计 第三章读书笔记(上)

热门文章

  1. 解码(五):sws_getContext和sws_scale像素格式和尺寸转换函数详解
  2. linux设置ntp开机同步时间同步,linux ntp时间同步
  3. mysql实例管理工具巨杉_使用_操作_MySQL实例_关系型数据库实例_文档中心_SequoiaDB巨杉数据库...
  4. android 充电模式deamon_Android MarsDaemon实现进程及Service常驻
  5. linux中脚本引入计算bc,linux BC命令行计算器
  6. linux下编程语言,linux下各种编程语言安装
  7. vue 指令 v-on
  8. Python RSA
  9. 3.1 神经网络概览
  10. numpy random 模块