我希望我的AutoCompleteExtender选择能够在后面的代码中触发事件。我之前从javascript代码中解雇了onClick事件,但在这种情况下,这似乎是额外的步骤。 最终,当用户从AutoCompleteExtender列表中选择一个名称时,我想获取与该名称相关联的ID,调用服务以获取更多数据,然后添加到页面上的GridView。我到目前为止......
<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事件?我想以最干净的方式实现这一目标。 感谢。
更新 - 这是目标文本框 -
<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),以便我可以在StudentNameSearchTextBox_TextChanged事件中使用它?
答案 0 :(得分:0)
在我看来,最干净的方法是将所选值保存到HiddenField的值,从隐藏按钮触发PostBack并在按钮的单击事件处理程序中执行所有人员。