2010-06-09 85 views
3

我最近升级此配置:使用UpdatePanel和ToolkitScriptManager时AjaxControlToolkit TabContainer ActiveTabChanged事件触发两次?

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标志甚至发射一个JavaScript postBack函数。

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

您对此有何看法,并有解决方案?

回答

1

我无法解决这个问题,因为它来自此组件的内部机制。我不会经过那丛林。所以我让一个设计师为我画出很酷的标签,并使用AJAX和Rest Services风格编写了我自己的标签控件。而已!我现在想要的行为我已经拥有了,现在工作起来相当不错;可控并将更少的JavaScript代码加载到客户机中。停止使用那个狗屎!