2013-04-18 100 views
1

我想我的AutoCompleteExtender選擇在代碼後面觸發事件。我之前從javascript代碼中觸發了onClick事件,但在這種情況下,這似乎是額外的步驟。 最終,當用戶從AutoCompleteExtender列表中選擇一個名稱時,我想要獲取與該名稱關聯的ID,調用服務以獲取更多數據,然後添加到頁面上的GridView。我至今...Ajax AutoCompleteExtender觸發C#事件

<ajaxToolkit:AutoCompleteExtender ID="StudentNameSearchTextBox_AutoCompleteExtender" runat="server" 
    TargetControlID="StudentNameSearchTextBox" 
    ServicePath="~/Scripts/AutoComplete.asmx" 
    ServiceMethod="GetStudents" 
    OnClientItemSelected="onStudentSelected" 
    MinimumPrefixLength="2" 
    CompletionSetCount="30" 
    UseContextKey="True" 
    CompletionListCssClass="autocomplete_completionListElement" 
    CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem" 
    CompletionListItemCssClass="autocomplete_listItem" > 
</ajaxToolkit:AutoCompleteExtender> 

的JavaScript:

<script type="text/javascript"> 
    function onStudentSelected(sender, e) { 
     var selectedStudent = eval("(" + e._value + ")"); 
     alert(selectedStudent); //this alerts what I expect 
     //how to call the SingleStudentSelected event, and send the selectedStudent 

用?

} 
</script> 

後面的代碼:

protected void SingleStudentSelected(object sender, EventArgs e) 
    { 
     ///TODO: get data from service and add to grid 
    } 

我能做到這一點直接,或者我需要有一個隱藏的按鈕或文本框火的OnChange事件?我想盡可能以最乾淨的方式完成這個任務。 謝謝。

更新 - 這是目標textbox--

<asp:TextBox ID="StudentNameSearchTextBox" runat="server" 
    CssClass="StudentNameSearch" OnTextChanged="StudentNameSearchTextBox_TextChanged" 
    ViewStateMode="Inherit"></asp:TextBox> 

已將此添加的JavaScript:

__doPostBack(sender.get_element().name, selectedStudent); 

這是事件:

protected void StudentNameSearchTextBox_TextChanged(object sender, EventArgs e) 
    { 
     ///TODO: get data from service and add to grid 
    } 

所以,我需要隱藏字段來保存selectedStudent(所選項目的VALUE),以便我可以在StudentName中使用它SearchTextBox_TextChanged事件?

回答

0

在我看來,最簡潔的方法是將選定的值保存到HiddenField的值中,從隱藏按鈕中激活PostBack並在按鈕的單擊事件處理程序中執行所有人員。

+0

有趣的是,我只是看着你的帖子在這裏:http://stackoverflow.com/questions/12838552/detect-autocompleteextender-select-event它是非常接近, - 我會編輯我的問題,以顯示我沒有。 – Jazzy

+0

解決方案,即使用戶在目標文本框中輸入任何文本,不會選擇任何選項,然後向服務器提交表單(例如,單擊任何按鈕),該文章中的建議仍會觸發服務器。 –

+0

在你的情況下,你不僅需要處理目標文本框的文本,而且還需要處理從建議列表中選擇的值。所以在我看來,TextBox的TextChanged事件並不是很好的選擇在這種情況下。 –