我最近升级此配置:使用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标志。并在自定义控件中的任何触发事件后重新启动它。
您对此有何看法,并有解决方案?