Estensore di schede personalizzato Ajax Control Toolkit per chiudere le schede lato client
-
18-09-2020 - |
Domanda
Sto tentando di scrivere un extender di controllo AJAX in grado di modificare un AJAX Control Toolkit TabPanel
In modo che la TabPanel
L'intestazione di ha un'immagine dopo il testo che, quando si fa clic, nasconde l'intestazione della scheda utilizzando lo script lato client (senza postback).Vorrei anche poter specificare una funzione onClientClose che viene chiamata anche quando una scheda viene chiusa.
Sono nuovo agli estensori di controllo ASP e finora ho seguito il [tutorial](http://www.asp.net/ajax/tutorials/creating-a-custom-ajax-control-toolkit-control-extender-cs"Creazione di un extender di controllo Custom AJAX Control Toolkit") sul sito ASP.NET per creare un extender personalizzato.Ho chiamato il mio extender a ClosableTabPanelExtender
, e il mio progetto di estensione viene creato.Ho creato una pagina web di prova in questo modo:
<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" />
Finora, quando eseguo il sito Web, ricevo il seguente errore:
The TargetControlID of 'ClosableTabPanelExtender1' is not valid. A control with ID 'TabPanel1' could not be found.
L'errore mi fa pensare che a TabPanel
non può essere esteso, quindi dovrò estendere il file TabContainer
Invece?
A parte l'errore, potrei usare qualche indicazione, soprattutto con lo script Behavior.Per me è la parte più sfuggente, anche se so che probabilmente ospiterà la maggior parte delle funzionalità che sto cercando di aggiungere.Inoltre, non sono sicuro di come funzionino insieme le altre parti dell'extender.
Ho il codice sorgente di Ajax Toolkit e ho esaminato il codice sorgente per i controlli Tab, che capisco parzialmente.Ho anche esaminato diversi esempi di estensori di controllo, principalmente Gli estensori di Matt Berseth e uno di Dan Wahlin.
Soluzione
Finalmente ho capito cosa dovevo fare.Per chi fosse interessato alla soluzione:
Per estendere il controllo TabPanel, ho dovuto aggirare l'errore che ho pubblicato sovrascrivendo il file
OnResolveControlID
metodo nel codice del server dell'extender (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; } } }
Per quanto riguarda lo script di comportamento lato client dell'extender (e l'interazione tra il codice server e client, gli articoli elencati su questa pagina MSDN sono utili e ti faranno risparmiare un sacco di problemi.