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事件?
有趣的是,我只是看着你的帖子在这里:http://stackoverflow.com/questions/12838552/detect-autocompleteextender-select-event它是非常接近, - 我会编辑我的问题,以显示我没有。 – Jazzy
解决方案,即使用户在目标文本框中输入任何文本,不会选择任何选项,然后向服务器提交表单(例如,单击任何按钮),该文章中的建议仍会触发服务器。 –
在你的情况下,你不仅需要处理目标文本框的文本,而且还需要处理从建议列表中选择的值。所以在我看来,TextBox的TextChanged事件并不是很好的选择在这种情况下。 –