Создал серверный контрол (CompositeControl), поместил в него Ajax'овский TabContainer. В результате после перехода на любую вкладку TabContainer-а кроме первой, событие возникает не один раз, а при каждом постбэке. При переходе на первую вкладку (TabIndex = 0) событие не возникает вообще. Совсем уж не адекватно ведут себя другие Ajax-контрлы, в частности ComboBox.
Вот код контрала:
[ToolboxData("<{0}:MyControl runat=\"server\"></{0}:MyControl>")]
public class MyControl: CompositeControl
{
private TabContainer tc = new TabContainer();
private Label l = new Label(){ Text = "No changed", ViewStateMode = ViewStateMode.Disabled};
protected override void CreateChildControls()
{
Panel pnl = new Panel();
Controls.Add(pnl);
tc.ActiveTabChanged += tc_ActiveTabChanged;
tc.AutoPostBack = AutoPostBack;
tc.Tabs.Add(New TabPanel());
tc.Tabs.Add(New TabPanel());
tc.Tabs.Add(New TabPanel());
pnl.Controls.Add(l);
pnl.Controls.Add(tc);
}
protected void tc_ActiveTabChanged(object sender, EventArgs e)
{
l.Text = "changed";
}
}
При использовании получаем, что событие в моем контроле отрабатывает при каждом постбэке, когда выбрана не нулевая вкладка, и не отрабатывает вообще, если выбрана нулевая. Если TabContainer просто кинуть на форму, все в порядке:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
<%@ Register Assembly="MyControl" Namespace="WebApplication1" TagPrefix="cc2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load()
{
Label1.Text = "no changed";
}
protected void TabContainer1_ActiveTabChanged(object sender, EventArgs e)
{
Label1.Text = "changed";
}
protected void Button1_Click(object sender, EventArgs e)
{
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
В контроле:<br />
<cc2:MyControl ID="MyCtr" runat="server"></cc2:MyControl>
Не в контроле:<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:TabContainer ID="TabContainer1" AutoPostBack="true" runat="server"
onactivetabchanged="TabContainer1_ActiveTabChanged" ActiveTabIndex="0">
<asp:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel1">
</asp:TabPanel>
<asp:TabPanel ID="TabPanel2" runat="server" HeaderText="TabPanel2">
</asp:TabPanel>
</asp:TabContainer>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</form>
</body>
</html>
Делаю вроде все по манам майкрософта, проще уже некуда. Подскажите, в чем может быть проблема, что я делаю не так. Куда копать хотя бы?