2010-06-24 5 views
1

Je me demande si quelqu'un peut m'aider avec cela. J'ai trois TabPanels selon l'onglet sur lequel je clique. Je voudrais appeler une autre fonction C# pour afficher un contenu différent. Je sais que je pourrais juste exécuter toutes les fonctions quand la page se charge mais cela semble malpropre. Je suis sûr qu'il y a un moyen de le faire mais je ne regarde pas beaucoup. Il est possible que je pense à ce sujet sous un mauvais angle, alors faites-moi savoir si vous pouvez trouver une meilleure façon de le faire.asp.net TabPanel appel C# fonction dans le code derrière

Toute aide serait grandement appréciée!

Exemple ASP.net

<ajaxToolkit:TabContainer ID="tabParameters" AutoPostBack="true" Width="100%" runat="server" ActiveTabIndex="0"> 
<ajaxToolkit:TabPanel ID="tabDetails" OnClientClick="Load_Details()" HeaderText="Details" runat="server"> 

Répondre

1

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

Questions connexes