2010-07-20 28 views
0

Je tente d'écrire un extendeur de contrôle AJAX qui peut modifier un AJAX Control Toolkit TabPanel afin que l'en-tête de TabPanel ait une image après le texte qui, lorsqu'on clique dessus , masque l'en-tête de l'onglet en utilisant le script côté client (sans publication). J'aimerais aussi pouvoir spécifier une fonction onClientClose qui est également appelée quand un onglet est fermé. Je suis nouveau pour les extendeurs de contrôle ASP, et jusqu'à présent, j'ai suivi le [tutoriel] (http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs "Création d'un extension de contrôle Toolkit personnalisé AJAX") sur le site ASP.NET pour créer un extendeur personnalisé. J'ai appelé mon extension ClosableTabPanelExtender, et mon projet d'extension se construit. Je mis en place une page web de test comme ceci:Ajax Control Toolkit personnalisé Extension de tabulation pour fermer les onglets côté client

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" /> 
<asp:TabContainer ID="TabContainer1" runat="server"> 
    <asp:TabPanel ID="TabPanel0" runat="server"> 
     <HeaderTemplate>Tab 0</HeaderTemplate> 
     <ContentTemplate>Hello!</ContentTemplate> 
    </asp:TabPanel> 
    <asp:TabPanel ID="TabPanel1" runat="server"> 
     <HeaderTemplate>Tab 1</HeaderTemplate> 
     <ContentTemplate>Goodbye!</ContentTemplate> 
    </asp:TabPanel> 
</asp:TabContainer> 
<cc1:ClosableTabPanelExtender ID="ClosableTabPanelExtender1" runat="server" 
    TargetControlID="TabPanel1" /> 

Jusqu'à présent, je reçois l'erreur suivante lorsque je lance le site:
The TargetControlID of 'ClosableTabPanelExtender1' is not valid. A control with ID 'TabPanel1' could not be found.
L'erreur me fait penser qu'un TabPanel ne peut être prolongé , alors je vais devoir étendre le TabContainer à la place? En dehors de l'erreur, je pourrais utiliser une certaine direction, en particulier avec le script Comportement. C'est la partie la plus insaisissable pour moi, bien que je sache qu'elle hébergera probablement la plupart des fonctionnalités que j'essaie d'ajouter. Je ne suis pas sûr non plus comment les autres parties de l'extendeur fonctionnent avec. J'ai le code source Ajax Toolkit, et j'ai regardé à travers la source pour les contrôles onglet, que je comprends partiellement. J'ai également regardé plusieurs exemples d'extendeurs de contrôle, principalement Matt Berseth's extenders et un de Dan Wahlin.

Répondre

0

J'ai finalement compris ce que j'avais besoin de faire. Pour quelqu'un qui est intéressé par la solution:

  • Afin d'étendre le contrôle TabPanel, je devais contourner l'erreur que j'ai posté en redéfinissant la méthode OnResolveControlID dans le code du serveur de mon extension (ClosableTabPanelExtender.cs).

    protected override void OnResolveControlID(ResolveControlEventArgs e) 
    { 
        // Get a reference to the outermost TabContainer that contains the TabPanel being extended. 
        TabContainer tabContainer = (TabContainer)base.FindControl(OuterTabPanelID); 
        if (tabContainer != null) 
        { 
         // Check to see if any of the tabs are the control we are looking form. 
         foreach (TabPanel tab in tabContainer.Tabs) 
         { 
          if (tab.ID == e.ControlID) 
          { 
           e.Control = tab; 
           return; 
          } 
         } 
         // If none of the tabs are what we are looking for, search the contents of each tab. 
         foreach (TabPanel tab in tabContainer.Tabs) 
         { 
          Control ctrl = tab.FindControl(e.ControlID); 
          if (ctrl != null) 
           return; 
         } 
        } 
    } 
    
  • En ce qui concerne le script de comportement côté client de l'extension (et l'interaction entre le code du serveur et le client, les articles figurant sur this MSDN page sont utiles et vous permettra d'économiser beaucoup d'ennuis.