背景
在利用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)上发消息给我吧。
各位,源码不再通过邮件发送了,太麻烦了. 不过你仍然可以点击这个链接https://www.dropbox.com/referrals/NTU3MzY4MjY5注册dropbox,然后再点击http://dl.dropbox.com/u/5736826/%E9%80%9A%E7%94%A8%E6%9F%A5%E8%AF%A2.zip下载.[可能需要代理访问]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)