CheckBoxlist Обновление DropDowlist в UpdatePanel больше не PostBack - PullRequest
0 голосов
/ 04 февраля 2019

Мне нужно обновить Dropdowlist в соответствии с выбранными значениями в CheckBoxList, избегая перезагрузки страницы, я использую UpdatePanel.У dropdwonlist всегда должен быть AutoPostback, он всегда должен вызывать мой «SearchEvent»

. Я использовал UpdatePanel и AsyncPostBackTrigger в моем CheckBoxlist для вызова функции в коде позади, чтобы обновить dropdowlist.

Это работает только один раз.После первого вызова я не могу вызвать CheckBoxlist SelectedIndexChanged, вместо этого я получаю ошибку:

"Sys.WebForms.PageRequestManagerServerErrorException: при обработке запроса на сервере произошла неизвестная ошибка. Код состояния, возвращаемый серверомбыло: 404 "

Мой выпадающий список также теряет PostBack, ничего не происходит.

Просмотр ASPX:

<td>
<asp:ScriptManager ID="ScriptManager" runat="server" />
 <asp:CheckBoxList ID="IsActiveFilterCheck" runat="server" AutoPostBack="true" AppendDataBoundItems="true" CausesValidation="False">
            <asp:ListItem Text="Active" Value="1" />
            <asp:ListItem Text="Closed" Value="0" />
 </asp:CheckBoxList>
</td>
<td>
<asp:UpdatePanel ID="UpdatePanel1" ChildrenAsTriggers="true" UpdateMode="Conditional" runat="server">
     <Triggers>
         <asp:AsyncPostBackTrigger ControlID="IsActiveFilterCheck" EventName="SelectedIndexChanged" />
     </Triggers>
    <ContentTemplate>
        <br /><br />
        <asp:DropDownList ID="StatusFilterList" runat="server" DataTextField="Name" DataValueField="Id">
        </asp:DropDownList>
   </ContentTemplate>
</asp:UpdatePanel>
</td>

Мой код:

private void Page_Load(object sender, System.EventArgs e)
{
RegisterCallbacks();
if (!IsPostBack)
{
    Initialize();
     }
 }

 override protected void OnInit(EventArgs e)
{
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
CheckProfil();
InitializeComponent();
base.OnInit(e);
 }

private void InitializeComponent()
{
   this.SearchButton.ServerClick += new System.EventHandler(this.SearchButton_ServerClick);
   this.StatusFilterList.SelectedIndexChanged += new System.EventHandler(this.SearchButton_ServerClick);
   this.IsActiveFilterCheck.SelectedIndexChanged += new System.EventHandler(this.IsActiveFilterCheck_Changed);
   this.Load += new System.EventHandler(this.Page_Load);
}

protected void IsActiveFilterCheck_Changed(object sender, EventArgs e)
    {
        // Update the Status Filter List
        StatusFilterList.Items.Clear();
        if (IsActiveFilterCheck.Items.Cast<ListItem>().Where(li => li.Selected).ToList().Count != 1)
        {
            BindListInsertAll(StatusFilterList, ExpectedStatusCollection.Instance.GetAll());
        }
        else
        {
            IList statusSelected = ExpectedStatusCollection.Instance
                                                            .GetAll().Cast<ExpectedStatusDo>()
                                                            .Where(exp => IsActiveFilterCheck.SelectedValue == "1" ? exp.Id != 5 && exp.Id != 6 : exp.Id == 5 || exp.Id == 6)
                                                            .ToList(); // Only Dead and Signed
            // Update the Status
            BindListInsertAll(StatusFilterList, statusSelected);
        }

        UpdatePanel1.Update();
        //FindByFilter();
    }

Когда я изменяю флажок IsActiveFilterCheck , мне нужно обновить только StatusFilterList , как показано в функции IsActiveFilterCheck_Changed , без перезагрузки полной страницы.

Этот StatusFilterList всегда должен вызывать / запускать событие SearchButton_ServerClick

Прямо сейчас. Это работает только один раз, когда срабатывает IsActiveFilterCheck мой список раскрывающихся списков обновляется, но после того, как я нажимаю в любом месте, я получаю сообщение об ошибке и не могу вызвать IsActiveFilterCheck

1 Ответ

0 голосов
/ 04 февраля 2019

Посмотрите на это:

AsyncPostBackTrigger работает только в первый раз

Люди обычно воссоздают триггер для работы послепервый раз.

...