2010-06-09 37 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代碼加載到客戶機中。停止使用那個狗屎!