利用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)上发消息给我吧。
参考资料
《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实现通用查询功能相关推荐
- php可以打印一个页面,利用html实现分页打印功能的实例详解
本篇介绍利用html实现分页打印功能的实例详解,有些不想打印出来的分页打印的都可以应用这类样式进行控制 在非打印时是无效的. 页面打印 /* 应用这个样式的在打印时隐藏 */ .noPrint { d ...
- redisson的锁的类型_绝对干货:利用redisson完成分布式锁功能
在单体架构中,我们使用synchronize或者Lock就能完成上锁同步的操作,但是这些在分布式,微服务的今天,失去了作用. 分布式锁的实现一般有三种解决方案:基于数据库表实现 基于缓存实现,比如re ...
- android mysql 搜索功能_android利用数据库实现搜索联想功能
[实例简介] android利用数据库实现搜索联想功能.主要实现的效果是和google百度搜索一样,实现联想功能. [实例截图] [核心代码] 4e431bd8-d287-4028-8476-7510 ...
- phantomjsjava_Java利用Phantomjs实现生成图片的功能
今天,给大家分享一个Java后端利用Phantomjs实现生成图片的功能,同学们使用的时候,可以参考下! PhantomJS简介 首先,什么是PhantomJS? 根据官网介绍: PhantomJS ...
- java 实现网络通信_利用Java怎么样实现网络通信功能
利用Java怎么样实现网络通信功能 发布时间:2020-11-20 15:19:04 来源:亿速云 阅读:72 作者:Leah 利用Java怎么样实现网络通信功能?相信很多没有经验的人对此束手无策,为 ...
- 我的Android进阶之旅------Android利用Sensor(传感器)实现水平仪功能的小例
这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端. 利用方向传感器返回的第一个参数,实现了一个指南针小应用. ...
- python基于opencv的手势识别_怎么在Python3.5 中利用OpenCV实现一个手势识别功能
怎么在Python3.5 中利用OpenCV实现一个手势识别功能 发布时间:2020-12-22 11:56:32 来源:亿速云 阅读:67 作者:Leah 怎么在Python3.5 中利用OpenC ...
- mysql xp cmdshell_LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句...
LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件,生成mysql的LOAD语句 LOAD语句:利用MSSQL中的xp_cmdshell功能,将指定文件夹下的指定文件 ...
- 【PHP学习】—利用ajax原理实现登录功能(八)
[PHP学习]-利用ajax原理实现登录功能(八) 通过学习上篇文章我们发现这种方法存在了一定的缺陷,利用页面跳转,HTML页面访问服务器,要等待服务器响应,账号密码输入错误后,还要回退页面重新输入账 ...
最新文章
- Linux的文件管理命令
- android系统应用程序,Android系统应用程序基本概念解读
- 深入浅出 SpringMVC - 2 提升篇
- 1.16 静态内部类
- 在真实工作中的编程是怎么样的,与学校里有什么不同?
- 动态规划 —— 状压 DP
- 更改lnmp安装后的MySQL密码方法
- Android UI开发第三十九篇——Tab界面实现汇总及比较
- 网站设计中很重要的概念div+浮动
- python学习手册-Python 重点知识整理(基于Python学习手册第四版)
- ti processor sdk linux am335x evm /bin/setup-minicom.sh hacking
- Node.js系列——(4)优势及场景
- Redis单线程模型详解
- G.8032 ERPS 轻松强固网络安全!
- 网上申请办理杭州市民卡
- 敏捷项目管理的前世今生及应用-Part 2(之3355)
- hmmer建立hmmscan
- Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook解决方法
- pip install kaggle 出现 【网络不可达】?
- windows 程序设计 第三章读书笔记(上)
热门文章
- 解码(五):sws_getContext和sws_scale像素格式和尺寸转换函数详解
- linux设置ntp开机同步时间同步,linux ntp时间同步
- mysql实例管理工具巨杉_使用_操作_MySQL实例_关系型数据库实例_文档中心_SequoiaDB巨杉数据库...
- android 充电模式deamon_Android MarsDaemon实现进程及Service常驻
- linux中脚本引入计算bc,linux BC命令行计算器
- linux下编程语言,linux下各种编程语言安装
- vue 指令 v-on
- Python RSA
- 3.1 神经网络概览
- numpy random 模块