Domanda

Sto tentando di scrivere un extender di controllo AJAX in grado di modificare un AJAX Control Toolkit TabPanel In modo che la TabPanelL'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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top