2008-10-09 63 views
2

如何將附加信息傳遞給返回項目集合的服務方法?我將試圖解釋我的意思,我在表單上有兩個文本框,我需要根據數據庫中的特定帳戶ID填寫姓名。所以,我需要傳遞一個整數給getNamesForDropDown方法。我想不出做什麼,所以我做了錯誤的事情,以及所使用的CompletionSetCount實際上通過我所需要的信息:ASP.NET中的AutoCompleteExtender附加信息

[System.Web.Services.WebMethod] 
[System.Web.Script.Services.ScriptMethod] 
public string[] getNamesForDropDown(string prefixText, int count) 
{ 
    String sql = "Select fldName From idAccountReps Where idAccount = " + count.ToString(); 
    //... rest of the method removed, this should be enough code to understand 
    //... the evil wrongness I did. 
} 

在我的前面側aspx文件,我設置了CompletionSetCount基於關閉用戶當前正在該頁面上查看的帳戶ID。

<ajaxtk:AutoCompleteExtender 
    runat="server" 
    ID="AC1" 
    TargetControlID="txtAccName" 
    ServiceMethod="getNamesForDropDown" 
    ServicePath="AccountInfo.asmx" 
    MinimumPrefixLength="1" 
    EnableCaching="true" 
    CompletionSetCount='<%# Eval("idAccount") %>' 
/> 

所以,這絕對是一個錯誤的方式......什麼是正確的方式?

回答

5

阿扎姆具有idea-但自動完成方法的簽名還可以有第三個參數的正確:

公共字符串[] yourmethod(字符串prefixText,詮釋計數,串contextKey

你可以拆分了contextKey字符串使用阿扎姆的方法 - 但這樣的結果,你不必擔心sanatizing用戶的輸入.Split的()的分隔符(:)

2

如果你喜歡,你可以使用帶有prefixText的分隔符。所以,你可以通過「1:BCD」,並在服務端可以拆分的兩個項目:

string[] arguments = prefixText.Split(':'); 
int id = Int32.Parse(arguments[0]); 
string text = arguments[1]; 
+0

我該如何控制發送給該方法的前綴文本? – stephenbayer 2008-10-09 19:50:17

+0

哦,我明白了!你是對的。該控件立即關注ServiceMethod,而不會在兩者之間停下來。我將需要稍後檢查! – azamsharp 2008-10-09 19:54:22

3

聖煙,我想這是我需要的,我發誓我從來沒有見過這個選項我開始之前編程這個。這是一個autocompleteextender的新屬性嗎?

Excerpt from Documentation

ContextKey - 提供給由ServiceMethod/ServicePath描述的Web方法的一個任選的過載的用戶/頁特定上下文。如果上下文鍵時,它應該有一個名爲contextKey string類型的附加參數相同的簽名:

[System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] 公衆請注意,您可以將「GetCompletionList」替換爲您選擇的名稱,但返回類型和參數名稱和類型必須完全相同匹配,包括案例。

編輯:如果它是新的或不是,或者我是否完全忽略它。它有效,我很高興。我花了大約10分鐘才弄清楚自己的答案。