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:
SQL Server 1

打开四个Handlerx.ashx文件,相比较与发现:
SQL Server 2

唯有高亮部分差距,那是各自类实例化。
尚无涉嫌,你明白.NET编程,可以抽象或是接口它们。在此Insus.NET使用的是接口。
在MVC在应用程序的Interfaces目录下,创立一个IAutoCompletable接口:
SQL Server 3

接口达成了,程序未来再的AutoComplete成效完结,在Entity序列中贯彻这一个接口即可,然而现在对曾经达成了的Entity,分别打开它来再一次完毕即可:
看望PinYinEntity.cs被改成什么样了:
SQL Server 4

另外的AbbreviatorEntity.cs类:
SQL Server 5

八个类都实作了接口,并回到了接口函数据类型DataTable。以后有新的此类成效充分时,commentout的主意代码,就不必再写了。
看来此间,我们在上三个类中,每个品种被commentout的语法中,还有一句是被划掉的,它是的意思是把DataTable转换为List<T>的。我可以再回过头去看Handlerx.ashx文件,在#25~#SQL Server,26行代码,它的意味是把List<T>种类化对象。

根据那两处代码,Insus.NET决定其余写一个协办函数整合,是对DataTable连串化的不二法门:
SQL Server 6

下边Insus.NET在Handlers目录下,写一个AutoComplete.ashx文件,将代替之前Handlerx.ashx文件:
SQL Server 7

西楚怀有jQuery想达成AutoComplete的功力,只须求引用此文件即可。此文件有添加多一个参数,Insus.NET是以多少表名来差异,当然你也足以按你的想法来定义那些参数。

string tableName = context.Request["tableName"];

此ashx文件还利用了反光(Reflection),即是根据所传诵的参数来反光到有落实过接口IAutoCompletable.cs的类。

接下去的工作,是对那存在的八个视图举行改动,每个视图中,只改一句代码:
SQL Server 8

 另一个视图:
SQL Server 9

 

未来,再添加其余一个新的AutoComplete成效时,有视图中,再引用此句:

 url: "/Handlers/AutoComplete.ashx?tableName=xxx&prefix=" + request.term,

个中xxx是意味你的参考值。

最后是附上实时操作演示:
SQL Server 10

下边是MVC应用程序磨练最新源代码与数据库备份文件。
先后是.NET Framework 4.5, 数据库为SQL Server 2012:
http://download.cnblogs.com/insus/MVC/InsusMVCSiteCS_2014_Feb14.rar 

 

相关文章