2013-04-18 62 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事件并不是很好的选择在这种情况下。 –