您好,登錄后才能下訂單哦!
如何解析Asp.net Ajax控件中的AutoComplete控件,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Asp.net Ajax 1.0控件中的AjaxControlToolkit系列控件的發布給開發人員帶來了很多便利,但其中很多控件似乎并沒有我們想像的那么***。最近對這里面的AutoComplete控件用得較多,發現了它的幾個不足或錯誤之處:
1.在某些情況下會出現“two components with the same id”的錯誤;
2.容易導致在IE中出現“無法打開Internet站點,…,已終止操作”的問題;
3.即使用戶輸入了很多的字符,即使已經沒有相匹配的結果,它仍然會調用服務端方法,試圖獲取相匹配的值,白白增加了服務器的負擔;
4.自動完成列表的樣式不太好看;
5.服務端方法的簽名必須是:string[] GetCompletionList(string prefixText, int count),無法從客戶端取得其它需要的數據。這一點在一個頁面中有多個需要從不同數據源獲取數據的AutoComplete控件時尤其致命。
要解決這些問題,首先需要知道怎樣來修改相應的代碼并使之在自己的應用中生效。值得慶幸的是,Asp.net Ajax控件中AjaxControlToolkit系列控件是開源的,所以我們可以根據自己的需要來盡情修改。用VS2005打開AjaxControlToolkit解決方案,打開AutoComplete文件夾中的AutoCompleteBehavior.js文件,修改并重新編譯后,將生成的AjaxControlToolkit.dll文件更新到自己的項目引用中,即可應用我們優化和增強后的Asp.net Ajax控件之AutoComplete控件了。
那么,在Asp.net Ajax控件中具體需要修改哪些代碼呢?
針對***個問題,需要在AjaxControlToolkit.AutoCompleteBehavior.callBaseMethod(this, 'dispose');這一行之前加上:
if (this._popupBehavior) { this._popupBehavior.dispose(); this._popupBehavior = null; }
第二個問題,要將
document.body.appendChild(this._completionListElement);
這一行修改為
element.parentNode.appendChild(this._completionListElement);
第三個問題,需要在_onTimerTick方法中,為
if (text.trim().length < this._minimumPrefixLength)
這個判斷增加一個條件,變成:
if (text.trim().length < this._minimumPrefixLength || text.trim().length > 10)
,這就使得,當用戶的輸入超過10個字符時,就不必向服務端調用讀取匹配值的方法了。
第四個問題,要調整自動完成列表的樣式,可以直接修改initializeCompletionList方法中的以下代碼:
completionListStyle.backgroundColor = this._textBackground; completionListStyle.color = this._textColor; completionListStyle.border = 'solid 1px buttonshadow'; completionListStyle.cursor = 'default'; completionListStyle.unselectable = 'unselectable'; completionListStyle.overflow = 'hidden';
,或者刪除這幾行,并添加:element.className = "completionList";然后在頁面上添加樣式類“completionList”的定義即可;
要解決***一個問題,應該在
{ prefixText : this._currentPrefix, count: this._completionSetCount}
這一行中增加一個發給服務器的參數,變為:
{ prefixText : this._currentPrefix, count: this._completionSetCount , srcId: this.get_element().getAttribute("srcid") }
從而,服務端的讀取自動完成列表項的方法簽名就可以寫成:
string[] GetCompletionList(string prefixText, int count ,string srcId)
這意味著,我們可以為需要應用自動完成功能的文本框預先設置一個用于標識其數據來源的標識字符串,C#代碼如:tb.Attributes.Add("srcid", "xxx"); 然后,在GetCompletionList方法中就可以根據客戶端傳過來的這個參數值來有針對性地讀取數據了。
Asp.net Ajax控件之AutoComplete控件的一些變化就向你介紹到這里,希望對你認識Asp.net Ajax控件有所幫助。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。