Übersicht über ASP.NET-Benutzersteuerelemente

Aktualisiert: November 2007

Es mag Fälle geben, in denen Sie in einem Steuerelement eine Funktionalität benötigen, die die integrierten ASP.NET-Webserversteuerelemente nicht bereitstellen. In diesen Fällen können Sie Ihre eigenen Steuerelemente erstellen. Dafür gibt es zwei Möglichkeiten. Erstellt werden können:

  • Benutzersteuerelemente. Benutzersteuerelemente sind Container, in die Sie Markup und Webserversteuerelemente einfügen können. Sie können das Benutzersteuerelement dann als Einheit behandeln und Eigenschaften und Methoden dafür definieren.

  • Benutzerdefinierte Steuerelemente. Ein benutzerdefiniertes Steuerelement ist eine selbst geschriebene Klasse, die von Control oder WebControl abgeleitet ist.

Benutzersteuerelemente sind erheblich leichter zu erstellen als benutzerdefinierte Steuerelemente, da Sie vorhandene Steuerelemente wiederverwenden können. Auf diese Weise lassen sich Steuerelemente mit komplexen Benutzeroberflächenelementen ohne großen Aufwand erstellen.

Dieses Thema enthält eine Übersicht über das Arbeiten mit ASP.NET-Benutzersteuerelementen.

Struktur des Benutzersteuerelements

Ein ASP.NET-Webbenutzersteuerelement ähnelt einer kompletten ASP.NET-Webseite (ASPX-Datei), denn es verfügt über eine Benutzoberflächenseite und Code. Das Benutzersteuerelement wird auf ähnliche Weise wie eine ASP.NET-Seite erstellt. Nach dem Erstellen fügen Sie das gewünschte Markup und die gewünschten untergeordneten Steuerelemente hinzu. Ein Benutzersteuerelement kann wie eine Seite Code zum Ändern der eigenen Inhalte enthalten und z. B. Aufgaben wie Datenbindung ausführen.

Die Unterschiede zwischen einem Benutzersteuerelement und einer ASP.NET-Webseite sind folgende:

  • Die Dateinamenerweiterung für das Benutzersteuerelement ist .ascx.

  • Statt einer @ Page-Direktive enthält das Benutzersteuerelement eine @ Control-Direktive, über die die Konfiguration und andere Eigenschaften definiert werden.

  • Benutzersteuerelemente können nicht als eigenständige Dateien ausgeführt werden. Stattdessen müssen sie wie andere Steuerelemente einer ASP.NET-Seite hinzugefügt werden.

  • Das Benutzersteuerelement verfügt nicht über die Elemente html, body und form. Diese Elemente müssen in der Hostseite enthalten sein.

Sie können für ein Benutzersteuerelement dieselben HTML-Elemente (bis auf die Elemente html, body und form) und Websteuerelemente wie für eine ASP.NET-Webseite verwenden. Wenn Sie z. B. ein Benutzersteuerelement als Symbolleiste erstellen, können Sie auf dem Steuerelement eine Reihe von Button-Webserversteuerelementen platzieren und Ereignishandler für die Schaltflächen erstellen.

Das folgende Beispiel zeigt ein Benutzersteuerelement, das ein Drehfeldsteuerelement implementiert. Darin können Benutzer durch Klicken auf entsprechende Schaltflächen die Auswahlmöglichkeiten in einem Textfeld nach oben oder nach unten durchlaufen.

Sicherheitshinweis:

In diesem Beispiel ist ein Textfeld für eine Benutzereingabe enthalten. Dies stellt ein potenzielles Sicherheitsrisiko dar. Standardmäßig stellt die ASP.NET-Seite sicher, dass die Benutzereingabe keine Skript- oder HTML-Elemente enthält. Weitere Informationen finden Sie unter Übersicht über Skriptangriffe.

<%@ Control Language="VB" ClassName="UserControl1" %>
<script >
    Protected colors As String() = {"Red", "Green", "Blue", "Yellow"}
    Protected currentColorIndex As Integer = 0
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If IsPostBack Then
            currentColorIndex = CInt(ViewState("currentColorIndex"))
        Else
            currentColorIndex = 0
            DisplayColor()
        End If
    End Sub
    
    Protected Sub DisplayColor()
        textColor.Text = colors(currentColorIndex)
        ViewState("currentColorIndex") = currentColorIndex.ToString()
    End Sub

    Protected Sub buttonUp_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If currentColorIndex = 0 Then
            currentColorIndex = colors.Length - 1
        Else
            currentColorIndex -= 1
        End If
        DisplayColor()
    End Sub
    
    Protected Sub buttonDown_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs)
        If currentColorIndex = colors.Length - 1 Then
            currentColorIndex = 0
        Else
            currentColorIndex += 1
        End If
        DisplayColor()
    End Sub
</script>
<asp:TextBox ID="textColor"  
    ReadOnly="True" />
<asp:Button Font-Bold="True" ID="buttonUp"   
    Text="^" OnClick="buttonUp_Click" />
<asp:Button Font-Bold="True" ID="buttonDown"  
    Text="v" OnClick="buttonDown_Click" />
<% @ Control Language="C#" ClassName="UserControl1" %>
<script >
    protected int currentColorIndex;
    protected String[] colors = {"Red", "Blue", "Green", "Yellow"};
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            currentColorIndex = 
                Int16.Parse(ViewState["currentColorIndex"].ToString());
        }
        else
        {
            currentColorIndex = 0;
            DisplayColor();
        }
    }
    
    protected void DisplayColor()
    {
        textColor.Text = colors[currentColorIndex];
        ViewState["currentColorIndex"] = currentColorIndex.ToString();
    }
    
    protected void buttonUp_Click(object sender, EventArgs e)
    {
        if(currentColorIndex == 0)
        {
            currentColorIndex = colors.Length - 1;
        }
        else
        {
            currentColorIndex -= 1;
        }
        DisplayColor();
    }

    protected void buttonDown_Click(object sender, EventArgs e)
    {
        if(currentColorIndex == (colors.Length - 1))
        {
            currentColorIndex = 0;
        }    
        else
        {
            currentColorIndex += 1;
        }
        DisplayColor();
    }
</script>
<asp:TextBox ID="textColor"  
    ReadOnly="True" />
<asp:Button Font-Bold="True" ID="buttonUp"  
    Text="^" OnClick="buttonUp_Click" />
<asp:Button Font-Bold="True" ID="buttonDown"  
    Text="v" OnClick="buttonDown_Click" />

Beachten Sie, dass das Benutzersteuerelement deutliche Ähnlichkeiten zu einer ASP.NET-Seite aufweist: Es enthält mehrere Steuerelemente (ein TextBox-Steuerelement und zwei Button-Steuerelemente) sowie Code, mit dem die Click-Ereignisse der Schaltflächen und das Load-Ereignis der Seite behandelt werden. Bis auf die Steuerelemente enthält das Steuerelement jedoch kein Markup, und anstelle einer @ Page-Direktive enthält es eine @ Control-Direktive.

Hinzufügen eines Benutzersteuerelements zu einer Seite

Sie fügen einer Seite ein Benutzersteuerelement hinzu, indem Sie es auf der Hostseite registrieren. Bei der Registrierung geben Sie die ASCX-Datei an, die das Benutzersteuerelement enthält, sowie ein Tagpräfix und einen Tagnamen, mit dem Sie das Benutzersteuerelement auf der Seite deklarieren. Einzelheiten finden Sie unter Gewusst wie: Einfügen eines Benutzersteuerelements in eine ASP.NET-Webseite.

Definieren von Eigenschaften und Methoden für ein Benutzersteuerelement

Sie können für ein Benutzerelement in derselben Weise Eigenschaften und Methoden definieren wie für eine Seite. Durch das Definieren einer Eigenschaft für ein Benutzersteuerelement wird es möglich, dessen Eigenschaften deklarativ oder im Code festzulegen.

Ereignisse in Benutzersteuerelementen

Wenn ein Benutzersteuerelement Webserversteuerelemente enthält, können Sie im Benutzersteuerelement Code schreiben, um die von den untergeordneten Steuerelementen ausgelösten Ereignisse zu behandeln. Wenn ein Benutzersteuerelement z. B. ein Button-Steuerelement enthält, können Sie im Benutzersteuerelement einen Handler für das Click-Ereignis der Schaltfläche erstellen.

Standardmäßig stehen die in einem Benutzersteuerelement von untergeordneten Steuerelementen ausgelösten Ereignisse der Hostseite nicht zur Verfügung. Sie können jedoch Ereignisse für das Benutzersteuerelement definieren und auslösen. Dadurch wird dann die Hostseite über die Ereignisse benachrichtigt. Das Definieren von Ereignissen für ein Benutzersteuerelement erfolgt auf dieselbe Weise wie für eine Klasse. Weitere Informationen finden Sie unter Auslösen eines Ereignisses.

Verweisen auf externe Ressourcen

Beim Ausführen eines Benutzersteuerelements werden Verweise auf externe Ressourcen wie Bilder und Anker zu anderen Seiten mit dem URL des Benutzersteuerelements als Basis-URL aufgelöst. Wenn das Benutzersteuerelement z. B. ein Image-Steuerelement enthält, dessen ImageUrl-Eigenschaft auf Images/Button1.gif festgelegt ist, wird dem URL des Benutzersteuerelements der URL des Bilds angehängt, um den vollständigen Pfad des Bilds aufzulösen. Wenn das Benutzersteuerelement auf eine Ressource verweist, die sich nicht im Unterordner des Benutzersteuerelements selbst befindet, müssen Sie einen Pfad angeben, dessen Auflösung zur Laufzeit den richtigen Ordner liefert. Weitere Informationen zum Angeben von Pfaden für ASP.NET-Serversteuerelemente finden Sie unter ASP.NET-Websitepfade.

Zwischenspeichern und Benutzersteuerelemente

Benutzersteuerelemente können Direktiven für die Zwischenspeicherung unterstützen, die von den Direktiven der Hostseite unabhängig sind. Deshalb wird durch das Hinzufügen von Benutzersteuerelementen zu einer Seite das Zwischenspeichern von Teilen der Seite möglich. Einzelheiten finden Sie unter Zwischenspeichern von Teilen einer ASP.NET-Seite.

Siehe auch

Weitere Ressourcen

ASP.NET-Benutzersteuerelemente