Frage

Ich versuche, einen AJAX-Steuerungs-Extender zu schreiben, der ein AJAX-Steuerungs-Toolkit ändern kann TabPanel damit die TabPanelDie 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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top