1

我希望我的 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(所选项目的值),以便我可以在 StudentNameSearchTextBox_TextChanged 事件中使用它?

4

1 回答 1

0

在我看来,最干净的方法是将选定的值保存到 HiddenField 的值,从隐藏按钮触发 PostBack 并在按钮的单击事件处理程序中执行所有工作人员。

于 2013-04-18T19:52:21.580 回答