怎样控制与复制相同的功能 MVC应用程序中,怎样控制与复制相同的功能

先看此篇《


打开两个Handlerx.ashx文件,对比与发现:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能


只有高亮部分不相同,那是各自类实例化。
没有关系,你懂得.NET编程,可以抽象或是接口它们。在此Insus.NET使用的是接口。
在MVC在应用程序的Interfaces目录下,创建一个IAutoCompletable接口:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能


接口实现了,程序将来再的AutoComplete功能实现,在Entity类别中实现这个接口即可,不过现在对已经实现了的Entity,分别打开它来重新实现即可:
看看PinYinEntity.cs被改成怎样了:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能


另外的AbbreviatorEntity.cs类:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能


两个类都实作了接口,并返回了接口函数据类型DataTable。以后有新的此类功能添加时,commentout的方法代码,就不必再写了。
看到这里,我们在上两个类中,每个类别被commentout的语法中,还有一句是被划掉的,它是的意思是把DataTable转换为List<T>的。我可以再回过头去看Handlerx.ashx文件,在#25~#26行代码,它的意思是把List<T>系列化对象。

根据这两处代码,Insus.NET决定另外写一个共同函数整合,是对DataTable系列化的方法:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能


下面Insus.NET在Handlers目录下,写一个AutoComplete.ashx文件,将替代以前Handlerx.ashx文件:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能


将来所有jQuery想实现AutoComplete的功能,只需要引用此文件即可。此文件有添加多一个参数,Insus.NET是以数据表名来区别,当然你也可以按你的想法来定义这个参数。

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


此ashx文件还应用了反射(

接下来的工作,是对那存在的两个视图进行修改,每个视图中,只改一句代码:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能

 另一个视图:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能

将来,再添加另外一个新的AutoComplete功能时,有视图中,再引用此句:

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


其中xxx是代表你的参考值。

最后是附上实时操作演示:
怎样控制与复制相同的功能
MVC应用程序中,怎样控制与复制相同的功能

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