我最近升级了这个配置:
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函数。
我考虑将一个IsLoaded标志在ViewState中放置在控件中。并在自定义控件中的任何触发事件后重新启动它。
您如何看待这个问题并且有任何解决方案?
答案 0 :(得分:1)
我无法解决这个问题,因为它来自这个组件的内部机制。我不会经历那个丛林。所以我让设计师为我绘制了很酷的标签,并使用AJAX和Rest Services样式编写了自己的标签控件。而已!我现在想要的行为我拥有它并且现在工作得非常好;可控制并将较少的JavaScript代码加载到客户端计算机中。停止使用那个狗屎!