Событие AjaxControlToolkit TabContainer ActiveTabChanged сработало дважды, когда используются UpdatePanel и ToolkitScriptManager? - PullRequest
3 голосов
/ 09 июня 2010

Я недавно обновил эту конфигурацию:

ASP.NET 2.0
AjaxControlToolkit, 1.0.20229.0
System.Web.Extensions, Version=2.0.0.0

Для

ASP.NET 3.5
System.Web.Extensions, Version=3.5.0.0
AjaxControlToolkit , Version=3.5.40412.0

У меня есть следующая структура:

<asp:ToolkitScriptManager ID="PageScriptManager" runat="server">  
</asp:ToolkitScriptManager>  
    <asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Always">
        <ContentTemplate>
         <ajaxToolkit:TabContainer 
              OnActiveTabChanged="TabContainerCarga_ActiveTabChanged"
              AutoPostBack="True">
                        <ajaxToolkit:TabPanel 
                            ID="tabRelatorios"
                            runat="server"
                            HeaderText="Relat&#243;rios">
                                <ContentTemplate>
                                    <CustomUserControl:relatorios id="CustomControl" Visible="False" runat="server" />                                                      
                                </ContentTemplate>
                                      <Triggers>
                                        <asp:PostBackTrigger ControlID="CustomControl" />
                                      </Triggers>
                            </ajaxToolkit:TabPanel>
                  <ajaxToolkit:TabPanel ... />
                  <ajaxToolkit:TabPanel ... />
                  <ajaxToolkit:TabPanel ... />
                  <ajaxToolkit:TabPanel ... />

У всех одинаковая первая структура. На серверном коде у меня есть:

protected void TabContainerCarga_ActiveTabChanged(object sender, EventArgs e)
{
   //handles TabPanels show/hide and fill up forms grids.
}

CustomControl имеет сетку, в которой есть несколько постбэков для выполнения таких операций, как добавление и удаление записей. Когда CustomControl загружается, он заполняет два <asp:DataGrid /> компонента.

  1. <asp:DataGrid /> загрузить список с некоторым текстовым полем, которое пользователь может заполнить и нажать кнопку, чтобы добавить записи.
  2. <asp:DataGrid /> показать любую введенную информацию. В целях истории.

Странное известное поведение - фактически активировать ActiveTabChanged дважды. В первый раз он действует так, как будто я загружаю состояние CustomControl в первый раз, и они отправляют событие.

Я не могу использовать какое-то решение, которое я видел, например установить флаг isFormLoaded или даже запустить функцию postBack javascript.

Я думаю о размещении флага IsLoaded, структурированного в ViewState внутри элемента управления. И перезапустите его после любого инициированного события внутри пользовательского элемента управления.

Что вы думаете по этому поводу, и есть ли какое-нибудь решение?

1 Ответ

1 голос
/ 11 апреля 2011

Я не смог решить эту проблему, потому что она исходит из внутренней механики этого компонента.Я бы не прошел через эти джунгли.Поэтому я попросил дизайнера нарисовать для меня классные вкладки и написал свой собственный элемент управления вкладками в стиле AJAX и Rest Services.Это оно!Поведение, которое я хотел сейчас, у меня есть и работает довольно хорошо;управляемый и загружает меньше кода JavaScript на клиентский компьютер.Хватит использовать это дерьмо!

...