2010-03-11 34 views
3

我不想使用web服務在文本框中填充自動完成擴展程序。在這種情況下,用戶輸入國家/地區名稱,我不想每次都訪問數據庫。我寧願將會話保持在會話狀態,並將自動完成功能「綁定」到該狀態。未使用web服務的文本框上的自動完成擴展程序

是否可以將ServicePath和/或ServiceMethod設置爲代碼隱藏內容而不是web服務?

問候 庫馬爾

回答

1

不幸的是,沒有直接的選擇可以做到這一點,除了黑客入侵JavaScript以阻止瀏覽器進行調用以獲取列表。

唯一的其他選擇,我可以看到的是創建一個web服務&使用AutoCompleteExtenderEnableCaching財產,以確保Web服務的結果被緩存在客戶端上,從而避免web服務(和數據庫反過來)調用。

編輯:第二個想法,我認爲它可以在您的頁面上標記一個公共靜態方法,WebMethod屬性&將ServicePath設置爲您的aspx頁面。

看看這有助於 - http://blogs.msdn.com/sburke/archive/2006/10/21/hint-components-that-use-web-services-with-asp-net-ajax-v1-0-beta.aspx

,我認爲它應該工作。但我不確定,如果框架要求它是 webservice。

0

貴國的名單發生變化,或者用戶有什麼不同?將它置於會話狀態似乎沒有意義。我不明白你爲什麼要打這臺服務器。

考慮將所有值直接渲染爲HTML,然後使用Javascript完全在客戶端自動完成。

+0

我綁定國家數據庫下拉。當用戶在可編輯文本框中輸入任何內容時,我需要從下拉菜單中獲取匹配的記錄,而不必再次訪問數據庫? – kumar

0

您可以在現有Web項目中使用本地asmx文件並連接到該文件。你可以在這裏放置你需要的任何邏輯,所以如果你不想要的話,你不必打數據庫。這真的就像另一個網頁,訪問會話狀態應該沒有問題。

0

您可以將onclientpopulating屬性設置爲您的本地JavaScript函數,例如onclientpopulating =「onPopulating」,然後在該js函數中提供本地數據而不是擊中Web服務。下面是我從未使用過的web服務的實現之一。 completionData變量保存所有的數據,通過這些數據我可以根據用戶在文本框中輸入的內容來迭代查找匹配。這是一個古老的例子。如果我現在實施它,我可能會做得不一樣。

function onPopulating(ace, args) 
    { 
     var prefixText = ace._currentCompletionWord(); 
     var filteredItems = GetFilteredItems(prefixText); 
     ace._update(prefixText,filteredItems,false); 
     args.set_cancel(true); 

    } 

    function GetFilteredItems(prefixText) 
    { 
     var filteredItems = []; 
     for (var nCount=0; nCount < completionData.length; nCount ++) 
     { 
      if (completionData[nCount].startsWith(prefixText)) 
      { 
       Array.add(filteredItems,completionData[nCount]); 

      } 
     } 
     return filteredItems; 
    }