Вызывает событие SelectedIndexChanged, но свойство autopostback списка имеет значение false - ASP.NET - PullRequest
1 голос
/ 01 ноября 2010

Я использую панель обновления. В этой панели обновлений есть элемент управления списком. Я фактически установил для свойства autopostback значение false в коде. Но все равно он выполняет событие SelectedIndexChanged, если выбранный индекс изменяется.

Почему это происходит?

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                                        <ContentTemplate>

                                            <asp:MultiView ID="mvForms" runat="server" ActiveViewIndex="1">
                                                <asp:View ID="View1" runat="server">
                                                     <asp:Panel ID="Panel5" runat="server" GroupingText="Available Evaluation Forms" meta:resourcekey="rsKey_panel5"
                                                     Width="100%">
                                                         <asp:ListBox ID="lbAvailableForms" runat="server" AutoPostBack="true"
                                                             style="height: 125px; width: 95%;" 
                                                             onselectedindexchanged="lbAvailableForms_SelectedIndexChanged"></asp:ListBox>
                                                      </asp:Panel>
                                                </asp:View>
                                                <asp:View ID="View2" runat="server">
                                                     <asp:Panel ID="Panel11" runat="server" GroupingText="Available Evaluation Forms" meta:resourcekey="rsKey_panel11"      Width="100%">
                                                        <div  style="height: 125px; width: 95%; text-align:center;">
                                                            <br />
                                                            <br />
                                                            <asp:Label ID="lblAllSelected" runat="server" Text="All Selected" meta:resourcekey="rsKey_lblAllSelected"></asp:Label></div>
                                                    </asp:Panel>
                                                </asp:View>
                                            </asp:MultiView>
                               </ContentTemplate>
                             <Triggers>      
                           <asp:AsyncPostBackTrigger ControlID="RLCompareParameter" EventName="SelectedIndexChanged"></asp:AsyncPostBackTrigger>          
                            <asp:AsyncPostBackTrigger ControlID="cbAllForms" EventName="CheckedChanged"></asp:AsyncPostBackTrigger>
                        </Triggers>
                      </asp:UpdatePanel>            

Имя списка - lbAvailableForms. Во время отладки я проверил свойство autopostback этого элемента управления списком, а затем обнаружил, что свойство имеет значение false. Это выглядит так странно, как то, что выбранное не обменивалось событием, запускающим

Здесь cbAllForm - это флажок управления, а RLCompareParameter - список радиолокаций.

Иногда мне нужно, чтобы свойство auto postback имело значение true. Поэтому изначально я установил для этого свойства значение true. под событием RLCompareParameter_SelectedIndexChanged я устанавливаю lbAvailableForms.Autopostback = false. Но все же после установки свойства в false, список запускается, выбрав индексированное событие

1 Ответ

2 голосов
/ 01 ноября 2010

Возможно, уже слишком поздно менять свойство AutoPostBack на этапе обработки события: UpdatePanel , возможно, уже зарегистрировал свои триггеры.

Я бы начал сотключение AutoPostBack и ViewState (которое запоминает AutoPostBack) в окне списка:

<asp:ListBox ID="lbAvailableForms" runat="server"
    AutoPostBack="False" EnableViewState="False"
    Style="height: 125px; width: 95%;"
    OnSelectedIndexChanged="lbAvailableForms_SelectedIndexChanged">
</asp:ListBox>

Затем введите приватный член, чтобы отслеживать то, что мы хотим сделать, и установите этого участника в событииобработчик:

private bool _disableAutoPostBack = false;

protected void RLCompareParameter_SelectedIndexChanged(object sender, EventArgs e)
{
    _disableAutoPostBack = true;
}

Затем используйте его в фазе PreRender:

protected void Page_PreRender(object sender, EventArgs e)
{
    lbAvailableForms.AutoPostBack = !_disableAutoPostBack;
}

Затем надеемся, что он работает как есть, поэтому нам не нужно динамически регистрировать AsyncPostBackTrigger на ListBox, что было бы грязно.

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