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 

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM