我最近升級此配置:使用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ó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 />
組件。
<asp:DataGrid />
負荷列表 一些文本框,用戶可以 填寫並按下一個按鈕來添加 記錄。<asp:DataGrid />
顯示任何輸入的信息。爲了歷史目的。
奇怪的已知行爲是,它實際上觸發了兩次ActiveTabChanged。在第一次,它的行爲就像我第一次加載CustomControl狀態,他們去做事件。
我不能使用一些解決方案我已經看到像設置isFormLoaded標誌甚至發射一個JavaScript postBack函數。
我想到在控件中放置一個ViewState中構造的IsLoaded標誌。並在自定義控件中的任何觸發事件後重新啓動它。
您對此有何看法,並有解決方案?