2013-06-27 43 views
4

我正在使用自動完成擴展程序在用戶輸入時提示名稱。如何在用戶選擇一個項目後獲取選擇值?我想我可以使用onclientitemselected但我不熟悉如何寫這個?我需要根據autocompleteextender文本框中的選擇來填充文本框。謝謝Ajax自動完成擴展程序並獲取選定項目的ID?

<asp:TextBox ID="TextBox1" runat="server" Height="27px" Width="570px"></asp:TextBox> 
     <asp:AutoCompleteExtender ID="AutoCompleteExtender" runat="server" 
    DelimiterCharacters="" Enabled="True" ServicePath="AutoComplete.asmx" 
    ServiceMethod="GetCompletionList" TargetControlID="TextBox1" 
    MinimumPrefixLength="2" UseContextKey="true" ContextKey="StateDropDown" 
      CompletionListElementID="autocompleteDropDownPanel"> 
</asp:AutoCompleteExtender> 

回答

0

AutoCompleteExtender只是延長了ASP.NET TextBox控制,因此,如果你想知道當文本改變了,那麼就提高對TextBox控制TextChanged事件,像這樣:

Markup: 
<asp:TextBox ID="TextBox1" runat="server" Height="27px" Width="570px" OnTextChanged="TextBox1_TextChanged" AutoPostBack="true"></asp:TextBox> 

Code-Behind: 
protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    // Do something here with textbox value 
} 
+0

在自動完成選擇的文本改變事件犯規火某些原因 – user1342164

+0

卡爾打敗了我,所以我會在下面添加我的答案:'TextBox'有一個'TextChanged'事件,您可以嘗試處理。根據我的經驗,它並不是非常有用,因爲它只會在用戶跳出盒子(而不是每個字符條目)之後觸發。但這可能適用於你。 –

+1

@ user1342164 - 對於要觸發的事件,「AutoPostBack」屬性必須爲true,請參閱上面編輯的代碼。 –

3

爲此,您需要使用ID和文本

這裏返回從Web服務方法列表中的「LST」是實際列表與您的d數據ata來源。

List<string> items = new List<string>(count); 
     for (int i = 0; i < lst.Count; i++) 
     { 
      string str =AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(lst[i].Text,Convert.ToString(lst[i].IDValue));     
      items.Add(str); 

     } 
     return items.ToArray(); 

然後簡單的JavaScript

function GetID(source, eventArgs) 
    { 
     var HdnKey = eventArgs.get_value(); 
     document.getElementById('<%=hdnID.ClientID %>').value = HdnKey; 
    } 

不要忘記設置在自動完成擴展 OnClientItemSelected =「的getId」屬性

相關問題