Вот сценарий.
У меня есть страница поиска с 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.
Есть идеи?
Это сводит меня с ума. Все остальное работает.
Заранее спасибо,
Клиф