Изменение выпадающего списка приводит к полной обратной передаче. (это интереснее, чем кажется) - PullRequest
0 голосов
/ 06 мая 2010

Вот сценарий.

У меня есть страница поиска с TextBox, которая позволяет кому-то ввести поисковый запрос и нажать клавишу ввода. (Который запускает TextChanged). У меня есть DropDownList, который определяет вид поиска, который будет выполняться. Это определяется в разметке следующим образом:

                    <asp:DropDownList ID="lstSearchType" runat="server" AutoPostBack="false">
                    <asp:ListItem Value="0">Last, First</asp:ListItem>
                    <asp:ListItem Value="1">Last</asp:ListItem>
                    <asp:ListItem Value="2">First</asp:ListItem>
                    <asp:ListItem Value="3">Liberty ID</asp:ListItem>
                    <asp:ListItem Value="4">E-mail</asp:ListItem>
                    <asp:ListItem Value="5">Telephone</asp:ListItem>
                    <asp:ListItem Value="6">Birthday (exact m/d/yyyy)</asp:ListItem>
                    <asp:ListItem Value="7">SSN (exact ###-##-####)</asp:ListItem>
                    <asp:ListItem Value="8">Address</asp:ListItem>
                </asp:DropDownList>

Как вы можете видеть, AutoPostBack имеет значение false, и событие не подключается.

При нажатии клавиши ввода запускается событие OnTextChanged для TextBox, которое выполняет поиск и обновляет GridView в UpdatePanel. Эта UpdatePanel имеет свой UpdateMode, установленный на условный, и имеет один триггер: событие TextChanged поискового TextBox.

Это очень просто.

И это прекрасно работает, почти.

Всякий раз, когда я меняю тип поиска, следующий поиск выполняет полный постбэк. Все последующие поиски выполняют частичные обратные передачи (по желанию), если я снова не изменю тип поиска.

Из этого правила есть одно исключение: если я загружаю страницу и сразу меняю тип поиска, она не выполняет полную обратную передачу. Таким образом, первое изменение DropDownList перед любой обратной (полной или частичной) не вызывает полную обратную передачу.

Полное раскрытие: Я делаю много JavaScript, чтобы изменить внешний вид gridview во время асинхронных запросов. Я не подробно описываю это здесь, потому что это кажется не связанным. Эта проблема возникает только при изменении DropDownList без подключения JavaScript.

Есть идеи?

Это сводит меня с ума. Все остальное работает.

Заранее спасибо, Клиф

1 Ответ

0 голосов
/ 13 июля 2010

Я понял это. Проблема заключалась в том, что DropDownList не было в UpdatePanel. У него не было способа получить значение без полной обратной передачи. TextBox был невосприимчив к этому из-за связывания событий TextChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...