Ajax AutoCompleteExtender для запуска события С#

Я хотел бы, чтобы мой выбор AutoCompleteExtender запускал событие в коде позади. Раньше я запускал события onClick из кода javascript, но в этом случае это похоже на дополнительные шаги. В конечном счете, когда пользователь выбирает имя из списка AutoCompleteExtender, я хочу взять идентификатор, связанный с этим именем, вызвать службу для получения дополнительных данных, а затем добавить в 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>

Яваскрипт:

<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?


person Jazzy    schedule 18.04.2013    source источник


Ответы (1)


На мой взгляд, самый чистый способ - сохранить выбранное значение в значение HiddenField, запустить PostBack со скрытой кнопки и выполнить все действия в обработчике события нажатия кнопки.

person Yuriy Rozhovetskiy    schedule 18.04.2013
comment
Забавно, я только что просмотрел ваш пост здесь: stackoverflow.com/questions /12838552/ это очень близко, -- я отредактирую свой вопрос, чтобы показать, что я сделал. - person Jazzy; 19.04.2013
comment
Решение, предложенное в этом посте, попадет на сервер, даже если пользователь введет какой-либо текст в целевое текстовое поле, не выберет какой-либо параметр, а затем отправит форму на сервер (например, нажмет любую кнопку). - person Yuriy Rozhovetskiy; 19.04.2013
comment
В вашем случае вам нужно обрабатывать не только текст целевого текстового поля, но и только значение, выбранное из списка предложений. Так что, на мой взгляд, событие TextChanged текстового поля не очень хороший вариант в этой ситуации. - person Yuriy Rozhovetskiy; 19.04.2013
comment
Я понимаю что ты имеешь ввиду. Кнопка это тогда. Спасибо. - person Jazzy; 19.04.2013