Je voudrais imbriquer les "fonctions" dans WebUserControls et les mettre en tabpanels séparés. Ils ne font rien sur Page.Load et sont invisibles. Définir une fonction "BindData" qui fait tout le DataBinding/Time-stuff. Lorsque l'utilisateur modifie l'ActiveTab (ou pour l'onglet actif par défaut), rendez visible UserControl et appelez sa fonction BindData.
Vous avez besoin de UpdatePanels (Updatemode = Conditionnel) autour de UserControl et d'un Async-Postback-Trigger avec Eventname = ActiveTabChanged pour que seul ce Panel soit rechargé.
Par exemple sur ASPX (MD_Location est UserControl, faute d'espace je ne posté un, mais vous devez imaginer beaucoup d'entre eux):
<act:TabContainer ID="TabContainer1" runat="server" AutoPostBack="true" >
<act:TabPanel ID="TabLocation" runat="server" HeaderText="Locations">
<ContentTemplate>
<asp:UpdatePanel ID="UpdLocation" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<MD:MD_Location id="MD_Location" runat="server" Visible="false" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TabContainer1" EventName="ActiveTabChanged" />
</Triggers>
</asp:UpdatePanel>
</ContentTemplate>
</act:TabPanel>
et dans le Codebehind (désolé, seulement VB.Net disponible, j'espère que vous avez l'idée):
Private Sub TabContainer1_ActiveTabChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TabContainer1.ActiveTabChanged
If Me.TabContainer1.ActiveTab Is Me.TabLocation Then
Me.MasterDataType = "Locations"
End If
switchControlVisibility()
End Sub
Private Sub switchControlVisibility()
Select Case Me.MasterDataType.ToLower
Case "locations"
Me.MD_Location.Visible = True
Me.Lblheader2.Text = "Locations"
UpdHeader.Update()
Me.MD_Location.BindData() '<---- do time-consuming stuff
Me.UpdLocation.Update()
End Sub
Exemple