天天看點

StyledAutoComplete - 支援豐富樣式的自動補全

最近手頭正好有些時間,也就逼迫自己耐着性子讀了讀AutoCompleteBehavior的代碼。不得不承認Ajax Control Tookit本身也在不停的發展之中,現在無論伺服器端還是用戶端都提供了非常強大的基礎元件,解決了大量常見問題,使得開發工作變得簡單了許多。與此形成鮮明對比的是文檔的缺乏,建議對于深入ASP.NET AJAX感興趣的朋友讀一下Ajax Control Toolkit的代碼,這對于您了解ASP.NET的控件模型與用戶端元件的開發大有碑益。

  我擴充了現有的AutoCompleteBehavior,使AutoComplete的功能能夠輕松支援豐富的樣式。我在這裡暫時不對實作方法進行分析,不過大家可以下載下傳代碼并進行一些測試,如果有任何問題還可以回報給我。另外,我認為目前StyledAutoCompleteBehavior的設計還不夠靈活,如果有什麼需要但是無法實作的功能請您告訴我,也歡迎大家給我一些功能設計方面的建議。自動補全是一個很常用的功能,可惜Ajax Control Toolkit中提供的功能實在不夠用。

  在我的擴充中,StyledAutoCompleteExtender繼承了AutoCompleteExtender,StyledAutoCompleteBehavior繼承了AutoCompleteBehavior,在編寫時我也盡可能的保持了原有的功能不變,是以大家在使用時完全可以将AutoCompleteExtender的标簽直接改為StyledAutoComplteExtender而不會影響到任何功能。與AutoCompleteExtender相比,StyledAutoCompleteExtender多了一個屬性ItemTemplate用于指定自動補全中每一項的模闆。例如我們要實作Google Suggest那樣的功能,則需要這樣使用StyledAutoCompleteExtender:

  請注意ItemTemplate裡的内容,它将作為自動補全每一項的HTML。而諸如{0}、{1}等則作為占位符,最終在顯示時将會使用伺服器端傳回的内容進行替換。為了配合這個功能,伺服器端的Web Service方法傳回值也有所變化:

  方法的傳回值變成了一個存放object數組的清單,每個object數組将會作為自動補全中每一項的資訊發送到用戶端。object數組的每個元素将用于替換模闆中的占位符(事實上,我使用了String.format方法來獲得每一項的HTML,是以事實上您也可以在這裡使用本地化的功能等等)。

StyledAutoComplete - 支援豐富樣式的自動補全

  新的控件将“補全的内容”和“顯示的内容”進行了分離。目前的控件将object數組的第一個元素(下标為0)作為“補全的内容”,在顯示的時候,我們可以将其忽略。例如,下面的代碼将會模拟Windows Live Mail中Email提示的功能(事實上,Live Mail的這部分自動補全是純用戶端功能,我這裡模拟的僅僅是“樣式”)。

  在這裡,ItemTemplate的内容很簡單,隻是将伺服器端傳回的每個object數組的第二個元素顯示在頁面上,而第一個元素則作為補全的文本。它對應的Web Service方法如下所示:

  伺服器端傳回的每個object數組長度為2,第一個元素用于自動補全,第二個元素用于顯示,是以需要将關鍵字部分進行加粗。

本文轉自 jeffz 51CTO部落格,原文連結:http://blog.51cto.com/jeffz/59880,如需轉載請自行聯系原作者 

繼續閱讀