У меня есть флажок и раскрывающийся список (с первым элементом `` Все ''), например:
<td style = "width: 15px">
<asp:CheckBox ID = "isAdvertiserFilter" runat = "server" AutoPostBack = "false"/>
</td>
<td style = "width: 330px">
<asp:DropDownList ID = "AdvertiserFilterList" runat = "server" DataTextField = "Name" DataValueField = "Id" AutoPostBack = "true" Enabled = "false"/>
</td>
Флажок включает / выключает раскрывающийся список.
Если этот параметр включен, пользователь может выбрать любой элемент в списке (All, Item1, Item2 ...). Событие обрабатывается в коде позади:
this.AdvertiserFilterList.SelectedIndexChanged += new EventHandler(SearchFilter);
Итак, когда пользователь снимает флажок, я хочу, чтобы раскрывающийся список был установлен на «Все» и отключен. В моем javascript, когда я устанавливаю «Все» (значение -1, индекс 0), он не запускает событие кода позади для вызова моей функции SearchFilter.
$(document).on({
click: function (event) {
if ($(event.target).is('#isAdvertiserFilter'))
{
// Enable or disable the dropdowlist
$('select[id* = "AdvertiserFilterList"]').attr("disabled", !$('input[id* = "isAdvertiserFilter"]').prop("checked"));
// When UNcheck
if (!$('input[id* = "isAdvertiserFilter"]').prop("checked")) {
// Set to the dropdownlist to All
$('select[id* = "AdvertiserFilterList"]').val("-1");
// Trying to fire the event
$('select[id* = "AdvertiserFilterList"]').trigger("change");
}
}
},
});
Как вызвать мой код позади или вызвать событие, как если бы это сделал пользователь?
Я хочу выполнить PostBack только тогда, когда флажок не установлен (а не проверять) или когда раскрывающийся список SelectIndexChanged
Вам нужно использовать __doPostBack



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно будет включить свойство Auto Postback из Visual Studio для любого элемента управления, который вы хотите вызвать исходным кодом.
Но будьте осторожны, события автоматической обратной передачи заставят вашу страницу загружаться снова. Если в вашей логике вы заполняете это поле со списком, вы потеряете выбранное значение и, вероятно, получите дублированный набор значений.
Чтобы исправить это, вам также необходимо поработать с переменной страницы isPostBack.
if (!isPostBack) {
.. code to populate combo box
} else {
.. code to handle user selection
}
Я бы хотел избежать обратной передачи для своего флажка только для включения флажка
Чтобы запускать PostBack всякий раз, когда я хотел, я все же установил для свойства AutoPostBack значение False и In Javascript:
$(document).on({
click: function (event) {
if ($(event.target).is('#isAdvertiserFilter'))
{
$('select[id* = "AdvertiserFilterList"]').attr("disabled", !$('input[id* = "isAdvertiserFilter"]').prop("checked"));
// When The checkbox is Uncheck
if (!$('input[id* = "isAdvertiserFilter"]').prop("checked")) {
// Do a PostBack
__doPostBack($('input[id* = "isAdvertiserFilter"]'), '');
}
}
},
});
В коде позади я сбрасываю значение раскрывающегося списка:
private void AdvertiserFilterCheckChanged(object sender, EventArgs e)
{
AdvertiserFilterList.Enabled = isAdvertiserFilter.Checked;
if (!isAdvertiserFilter.Checked)
{
AdvertiserFilterList.SelectedIndex = -1;
FindByFilter();
}
}
Возможный дубликат Обратная передача ASP.NET с помощью JavaScript