Ajax Control Toolkit benutzerdefinierte Tab-Erweiterung zum Schließen von Tabs clientseitig
-
18-09-2020 - |
Frage
Ich versuche, einen AJAX-Steuerungs-Extender zu schreiben, der ein AJAX-Steuerungs-Toolkit ändern kann TabPanel
damit die TabPanel
Die Kopfzeile enthält nach dem Text ein Bild, das beim Klicken die Registerkartenüberschrift mithilfe eines clientseitigen Skripts (ohne Postback) ausblendet.Ich möchte auch eine onClientClose-Funktion angeben können, die auch aufgerufen wird, wenn eine Registerkarte geschlossen wird.
Ich bin neu bei ASP-Steuerungs-Extendern und habe bisher das [Tutorial] befolgt.(http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs"Erstellen eines benutzerdefinierten AJAX Control Toolkit Control Extenders") auf dem ASP.NET site zum Erstellen eines benutzerdefinierten Extenders.Ich habe meinen Extender a genannt ClosableTabPanelExtender
, und mein Extender-Projekt baut.Ich habe eine Testwebseite wie folgt eingerichtet:
<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" />
Bisher erhalte ich beim Ausführen der Website die folgende Fehlermeldung:
The TargetControlID of 'ClosableTabPanelExtender1' is not valid. A control with ID 'TabPanel1' could not be found.
Der Fehler lässt mich denken, dass a TabPanel
kann nicht verlängert werden, also muss ich das verlängern TabContainer
stattdessen?
Abgesehen von dem Fehler könnte ich eine Richtung verwenden, insbesondere mit dem Verhaltensskript.Es ist für mich der schwer fassbarste Teil, obwohl ich weiß, dass es wahrscheinlich die meisten Funktionen enthalten wird, die ich hinzufügen möchte.Ich bin mir auch nicht sicher, wie die anderen Teile des Extenders damit zusammenarbeiten.
Ich habe den Quellcode des Ajax-Toolkits und habe die Quelle nach den Registerkarten-Steuerelementen durchgesehen, die ich teilweise verstehe.Ich habe auch einige Beispiele für Kontrollverlängerer durchgesehen, hauptsächlich Matt Berseths Extender und einer von Dan Wahlin.
Lösung
Ich habe endlich herausgefunden, was ich tun musste.Für alle, die an der Lösung interessiert sind:
Um das TabPanel-Steuerelement zu erweitern, musste ich den von mir geposteten Fehler umgehen, indem ich das überschrieb
OnResolveControlID
methode im Servercode meines Extenders (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; } } }
Was das clientseitige Verhaltensskript des Extenders (und die Interaktion zwischen Server- und Clientcode) betrifft, sind die Artikel auf aufgeführt diese MSDN-Seite sind hilfreich und ersparen Ihnen viel Ärger.