使用UpdatePanel和ToolkitScriptManager时,AjaxControlToolkit TabContainer ActiveTabChanged事件被触发两次?

时间:2010-06-09 18:14:49

标签: asp.net ajaxcontroltoolkit

我最近升级了这个配置:

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 />显示所有输入的信息。为了历史目的。
  3. 奇怪的已知行为是,它实际上激活了两次ActiveTabChanged。在第一次,它表现得像我第一次加载CustomControl状态,他们去做事件。

    我不能使用我见过的一些解决方案,比如设置isFormLoaded标志甚至可以激活一个javascript postBack函数。

    我考虑将一个IsLoaded标志在ViewState中放置在控件中。并在自定义控件中的任何触发事件后重新启动它。

    您如何看待这个问题并且有任何解决方案?

1 个答案:

答案 0 :(得分:1)

我无法解决这个问题,因为它来自这个组件的内部机制。我不会经历那个丛林。所以我让设计师为我绘制了很酷的标签,并使用AJAX和Rest Services样式编写了自己的标签控件。而已!我现在想要的行为我拥有它并且现在工作得非常好;可控制并将较少的JavaScript代码加载到客户端计算机中。停止使用那个狗屎!