MVC应用程序中,怎样控制与复制相同的功能
先看此篇《MVC程序实现Autocomplete功能》 http://www.cnblogs.com/insus/p/3546255.html 它是实现使用jQuery实现文本框输入文字,出现下拉列表,自动完成与选择功能。
相信你的开发的MVC应用程序中,不止有唯一一个此AutoComplete功能。如果有多个时,或是不断新加时,你的Handlers目录下,肯定会出现多个ashx文件来支持。每增加一个,就会去复制然后修改它。因为这个ashx内处理的是不同类各自的数据。
因此让Insus.NET想起来,是否可以所有AutoComplete只共用一个ashx文件呢? 是否能够解决与实现,但愿尝试一下。
本篇文章,将使用到接口(interface),反射(Reflection)等技术与知识。
为了更生动与演示,Insus.NET根据前一篇的例子,再添加了另外一个AutoComplete:
打开两个Handlerx.ashx文件,对比与发现:
只有高亮部分不相同,那是各自类实例化。
没有关系,你懂得.NET编程,可以抽象或是接口它们。在此Insus.NET使用的是接口。
在MVC在应用程序的Interfaces目录下,创建一个IAutoCompletable接口:
接口实现了,程序将来再的AutoComplete功能实现,在Entity类别中实现这个接口即可,不过现在对已经实现了的Entity,分别打开它来重新实现即可:
看看PinYinEntity.cs被改成怎样了:
另外的AbbreviatorEntity.cs类:
两个类都实作了接口,并返回了接口函数据类型DataTable。以后有新的此类功能添加时,commentout的方法代码,就不必再写了。
看到这里,我们在上两个类中,每个类别被commentout的语法中,还有一句是被划掉的,它是的意思是把DataTable转换为List<T>的。我可以再回过头去看Handlerx.ashx文件,在#25~#26行代码,它的意思是把List<T>系列化对象。
根据这两处代码,Insus.NET决定另外写一个共同函数整合,是对DataTable系列化的方法:
下面Insus.NET在Handlers目录下,写一个AutoComplete.ashx文件,将替代以前Handlerx.ashx文件:
将来所有jQuery想实现AutoComplete的功能,只需要引用此文件即可。此文件有添加多一个参数,Insus.NET是以数据表名来区别,当然你也可以按你的想法来定义这个参数。
string tableName = context.Request["tableName"];
此ashx文件还应用了反射(Reflection),即是根据所传入的参数来反射到有实现过接口IAutoCompletable.cs的类。
接下来的工作,是对那存在的两个视图进行修改,每个视图中,只改一句代码:
另一个视图:
将来,再添加另外一个新的AutoComplete功能时,有视图中,再引用此句:
url: "/Handlers/AutoComplete.ashx?tableName=xxx&prefix=" + request.term,
其中xxx是代表你的参考值。
最后是附上实时操作演示:
下面是MVC应用程序练习最新源代码与数据库备份文件。
程序是.NET Framework 4.5, 数据库为SQL Server 2012:
http://download.cnblogs.com/insus/MVC/InsusMVCSiteCS_2014_Feb14.rar
MVC应用程序中,怎样控制与复制相同的功能的更多相关文章
- 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
在ASP.NET MVC应用程序中,如果使用Server.Transfer()方法希望将请求转发到其它路径或者Http处理程序进行处理,都会引发“为xxx执行子请求时出错”的HttpException ...
- 在MVC应用程序中动态加载PartialView
原文:在MVC应用程序中动态加载PartialView 有时候,我们不太想把PartialView直接Render在Html上,而是使用jQuery来动态加载,或是某一个事件来加载.为了演示与做好这个 ...
- 在MVC应用程序中,怎样删除上传的文件
在ASP.NET MVC应用程序中,怎样删除上传的文件. 由于上传时,真正文件是存储在应用程序某一目录,在数据库表中,只是存储其基本信息.在删除时,需要注意一下,由于没有事务可操作.Insus.NET ...
- 在MVC应用程序中使用jQuery的验证
呵呵,觉得很久没有写博客了,均是工作忙于公司的ERP系统,这是正确的,因为这才是真正的工作. 今天想写点在MVC应用程序中,使用jQuery来验证.在进行之前,还是先回看一下<MVC会员注册&g ...
- 使用ASP.NET Core MVC应用程序中的ResponseCache属性处理缓存(转载)
HTTP响应的缓存意味着当发出HTTP请求时,服务器生成的响应由浏览器或服务器存储在某个地方,以便在对同一资源的连续HTTP请求中重复使用.实质上,我们正在存储生成的响应,并将该响应重用于后续请求一段 ...
- 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)
作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...
- ASP.NET Core MVC应用程序中的后台工作任务
在应用程序的内存中缓存常见数据(如查找)可以显着提高您的MVC Web应用程序性能和响应时间.当然,这些数据必须定期刷新. 当然你可以使用任何方法来更新数据,例如Redis中就提供了设定缓存对象的生命 ...
- 在ASP.NET MVC应用程序中随机获取一个字符串
在开发ASP.NET MVC应用程序时,有可能需要一个随机字符串,作为密码或是验证码等. 如果你需要的是SQL版本,可以参考<密码需要带特殊字符(二)>http://www.cnblogs ...
- [水煮 ASP.NET Web API2 方法论](1-1)在MVC 应用程序中添加 ASP.NET Web API
问题 怎么样将 Asp.Net Web Api 加入到现有的 Asp.Net MVC 项目中 解决方案 在 Visual Studio 2012 中就已经把 Asp.Net Web Api 自动地整合 ...
随机推荐
- java中 ==与equals 有什么区别?
1.==既可以比较基本类型变量,又可比较引用类型变量,而equals只能比较引用类型变量: 2.equals方法支持重写,如果未重写equals方法,则比较引用变量时与==都是比较变量所指向的对象地址 ...
- 几个Windows电脑小技巧
1. 为cmd命令提示符设置默认的初始路径: 到开始菜单-附件-属性 里面有起始位置选项 其中%HOMEDRIVE%%HOMEPATH%就代表起始位置 如想每次键cmd进入命令提示符后的初始位置是 ...
- C#数组的声明方式
C#数组的五种声明方式 一.声明一个未经初始化的数组引用,以后可以把这引用初使化为一个数组实例 int[] intArray; intArray = new int[10]; 注:数组的引用必须以相同 ...
- Unity 逐步旋转
npc.transform.rotation = Quaternion.Slerp(npc.transform.rotation, Quaternion.LookRotation(moveDir), ...
- BZOJ4699 : 树上的最短路
这道题主要是要解决以下两个问题: 问题1: 给定一个点$x$,如何取出所有经过它的下水道? 一条下水道经过$x$等价于它起点在$x$的子树里面且终点不在$x$的子树里面,或者两端点的lca就是$x$. ...
- BZOJ1103[POI2007]大都市meg 题解
题目大意: 有一棵树,最先每条边的权值是1,然后给出n+m-1个操作,操作有两种:1.询问一个点到根的路径上的权值和:2.将一条边的权值改为0. 思路: 用dfs序将树化为序列,在dfs序中我们会保存 ...
- Windows 8 Tips
Precisely this article is about Windows 8.1, the title uses Windows 8 due to the fact that Windows 8 ...
- Coder-Strike 2014 - Round 1 A. Poster
主要就是先将梯子移动到最左边或者最右边 k>n/2时移动到最右边 k<=n/2时移动到最左边 然后遍历一遍 #include <iostream> #include <v ...
- 【BZOJ1012】 【JSOI2008】最大数maxnumber
Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...
- ubuntu 装机及装机以后干的事情
一.装系统 下载ubuntu镜像 ubuntu 16.04 镜像下载(linux公社) 安装unetbootin (u盘启动盘制作工具) sudo apt-get install unetbootin ...