Создать постбэк в javascript - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть флажок и раскрывающийся список (с «Все» в качестве первого элемента), например, так:

<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, только когда установлен флажок UNcheck (а не check) или когда выпадающий список 'SelectIndexChanged'

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Чтобы запускать 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();
        }
    }
0 голосов
/ 29 ноября 2018

Вам нужно будет включить свойство Auto Postback из Visual Studio для любого элемента управления, для которого вы хотите вызвать код.

Но учтите, что события автоматической обратной передачи вызовут повторное выполнение загрузки вашей страницы.,Если в вашей логике вы заполняете это поле со списком, вы потеряете выбранное значение и, скорее всего, получите дублированный набор значений.

Чтобы исправить это, вам также нужно работать с isPostBack переменной страницы

if (!isPostBack) {
 .. code to populate combo box
} else {
    .. code to handle user selection
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...