国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

微軟Asp.net Ajax 1.0的AutoComplete控件的幾處修正和增強

2019-11-18 16:33:07
字體:
供稿:網(wǎng)友

  隨asp.net Ajax 1.0發(fā)布的AjaxControlToolkit系列控件給開發(fā)人員帶來了很多便利,但其中很多控件似乎并沒有我們想像的那么完美。最近對這里面的AutoComplete控件用得較多,發(fā)現(xiàn)了它的幾個不足或錯誤之處:
  1.在某些情況下會出現(xiàn)“two components with the same id”的錯誤;
  2.容易導致在IE中出現(xiàn)“無法打開Internet站點,…,已終止操作”的問題;
  3.即使用戶輸入了很多的字符,即使已經(jīng)沒有相匹配的結果,它仍然會調(diào)用服務端方法,試圖獲取相匹配的值,白白增加了服務器的負擔;
  4.自動完成列表的樣式不太好看;
  5.服務端方法的簽名必須是:string[] GetCompletionList(string PRefixText, int count),無法從客戶端取得其它需要的數(shù)據(jù)。這一點在一個頁面中有多個需要從不同數(shù)據(jù)源獲取數(shù)據(jù)的AutoComplete控件時尤其致命。

  要解決這些問題,首先需要知道怎樣來修改相應的代碼并使之在自己的應用中生效。值得慶幸的是,AjaxControlToolkit系列控件是開源的,所以我們可以根據(jù)自己的需要來盡情修改。用VS2005打開AjaxControlToolkit解決方案,打開AutoComplete文件夾中的AutoCompleteBehavior.js文件,修改并重新編譯后,將生成的AjaxControlToolkit.dll文件更新到自己的項目引用中,即可應用我們優(yōu)化和增強后的AutoComplete控件了。

  那么,具體需要修改哪些代碼呢?
  針對第一個問題,需要在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個字符時,就不必向服務端調(diào)用讀取匹配值的方法了。

  第四個問題,要調(diào)整自動完成列表的樣式,可以直接修改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}這一行中增加一個發(fā)給服務器的參數(shù),變?yōu)?
  { prefixText : this._currentPrefix, count: this._completionSetCount , srcId: this.get_element().getAttribute("srcid") }
  從而,服務端的讀取自動完成列表項的方法簽名就可以寫成:string[] GetCompletionList(string prefixText, int count ,string srcId)。這意味著,我們可以為需要應用自動完成功能的文本框預先設置一個用于標識其數(shù)據(jù)來源的標識字符串,C#代碼如:tb.Attributes.Add("srcid", "xxx"); 然后,在GetCompletionList方法中就可以根據(jù)客戶端傳過來的這個參數(shù)值來有針對性地讀取數(shù)據(jù)了。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 庆安县| 大港区| 南丰县| 红原县| 三原县| 达州市| 灵武市| 韶关市| 北票市| 靖江市| 安顺市| 龙口市| 聂荣县| 洛宁县| 宁化县| 布尔津县| 丁青县| 象州县| 理塘县| 宿松县| 普格县| 水富县| 阳江市| 宜黄县| 宝清县| 山东| 黄浦区| 元阳县| 黎川县| 普宁市| 唐山市| 红桥区| 宜兰县| 金坛市| 竹北市| 舞钢市| 隆德县| 昭平县| 左贡县| 四子王旗| 曲松县|