先看此篇《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应用程序中,怎样控制与复制相同的功能的更多相关文章

  1. 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能

    在ASP.NET MVC应用程序中,如果使用Server.Transfer()方法希望将请求转发到其它路径或者Http处理程序进行处理,都会引发“为xxx执行子请求时出错”的HttpException ...

  2. 在MVC应用程序中动态加载PartialView

    原文:在MVC应用程序中动态加载PartialView 有时候,我们不太想把PartialView直接Render在Html上,而是使用jQuery来动态加载,或是某一个事件来加载.为了演示与做好这个 ...

  3. 在MVC应用程序中,怎样删除上传的文件

    在ASP.NET MVC应用程序中,怎样删除上传的文件. 由于上传时,真正文件是存储在应用程序某一目录,在数据库表中,只是存储其基本信息.在删除时,需要注意一下,由于没有事务可操作.Insus.NET ...

  4. 在MVC应用程序中使用jQuery的验证

    呵呵,觉得很久没有写博客了,均是工作忙于公司的ERP系统,这是正确的,因为这才是真正的工作. 今天想写点在MVC应用程序中,使用jQuery来验证.在进行之前,还是先回看一下<MVC会员注册&g ...

  5. 使用ASP.NET Core MVC应用程序中的ResponseCache属性处理缓存(转载)

    HTTP响应的缓存意味着当发出HTTP请求时,服务器生成的响应由浏览器或服务器存储在某个地方,以便在对同一资源的连续HTTP请求中重复使用.实质上,我们正在存储生成的响应,并将该响应重用于后续请求一段 ...

  6. 跨平台应用集成(在ASP.NET Core MVC 应用程序中集成 Microsoft Graph)

    作者:陈希章 发表于 2017年6月25日 谈一谈.NET 的跨平台 终于要写到这一篇了.跨平台的支持可以说是 Office 365 平台在设计伊始就考虑的目标.我在前面的文章已经提到过了,Micro ...

  7. ASP.NET Core MVC应用程序中的后台工作任务

    在应用程序的内存中缓存常见数据(如查找)可以显着提高您的MVC Web应用程序性能和响应时间.当然,这些数据必须定期刷新. 当然你可以使用任何方法来更新数据,例如Redis中就提供了设定缓存对象的生命 ...

  8. 在ASP.NET MVC应用程序中随机获取一个字符串

    在开发ASP.NET MVC应用程序时,有可能需要一个随机字符串,作为密码或是验证码等. 如果你需要的是SQL版本,可以参考<密码需要带特殊字符(二)>http://www.cnblogs ...

  9. [水煮 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 自动地整合 ...

随机推荐

  1. 项目新的需求,网页的自适应交付/响应式交付 Responsive/Adaptive Delivery

    网页为什么要做自适应交付,皆因现在移动设备大行其道,现在是移动互联网时代,以IOS及Android为首的各种移动终端已经遍地开花. 当人家用380px的iphone打开你的网页时,你总不能显示个102 ...

  2. 转载:Java面试笔试题大汇总

    本文来源于:http://blog.csdn.net/wulianghuan 1.面向对象的特征有哪些方面 1).抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关 ...

  3. [转]基于gulp和webpack的前端工程化

    本文样例代码 :https://github.com/demohi/learning-gulp 本文主要简单介绍一下基于gulp和webpack的前端工程化. 技术栈 React.js reFlux ...

  4. SCOI 2013 密码 & 乱搞

    题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...

  5. 【HDU】3506 Monkey Party

    http://acm.hdu.edu.cn/showproblem.php?pid=3506 题意:环形石子合并取最小值= =(n<=1000) #include <cstdio> ...

  6. BZOJ3835: [Poi2014]Supercomputer

    Description Byteasar has designed a supercomputer of novel architecture. It may comprise of many (id ...

  7. BZOJ1485: [HNOI2009]有趣的数列

    Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<…&l ...

  8. XCode编译文件过多导致内存吃紧解决方法

    XCode编译文件过多导致内存吃紧解决方法 /Users/~~/Library/Developer/Xcode/DerivedData 1) 然后 找到编译文件 删除 就好了哦 快去试试看吧

  9. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境

    作者:唐老师,华清远见嵌入式学院讲师. 编译Android源码 关于android系统的编译,Android的官方网站上也给出了详细的说明.http://source.android.com/sour ...

  10. GO语言练习:实现最简单的http helloword 服务器

    用Go语言实现一个最简单的http服务器端,主要用到了package io, log, net/http 这个3个库. 用到的函数包括: http.Handle() http.HandlerFunc( ...