zoukankan      html  css  js  c++  java
  • MVC应用程序中,怎样控制与复制相同的功能

    先看此篇《MVC程序实现Autocomplete功能http://www.cnblogs.com/insus/p/3546255.html 它是实现使用jQuery实现文本框输入文字,出现下拉列表,自动完成与选择功能。

    相信你的开发的MVC应用程序中,不止有唯一一个此AutoComplete功能。如果有多个时,或是不断新加时,你的Handlers目录下,肯定会出现多个ashx文件来支持。每增加一个,就会去复制然后修改它。因为这个ashx内处理的是不同类各自的数据。

    因此让Insus.NET想起来,是否可以所有AutoComplete只共用一个ashx文件呢? 是否能够解决与实现,但愿尝试一下。

    本篇文章,将使用到接口(interface),反射()等技术与知识。

    为了更生动与演示,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文件还应用了反射(

    接下来的工作,是对那存在的两个视图进行修改,每个视图中,只改一句代码:

     另一个视图:

    将来,再添加另外一个新的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 


  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/insus/p/3549557.html
Copyright © 2011-2022 走看看