Freigeben über


Entwickeln eines einfachen ASP.NET-Serversteuerelements

Unter diesem Thema wird schrittweise ein einfaches benutzerdefiniertes Serversteuerelement erstellt, das über eine Eigenschaft verfügt, aber keine Ereignisse auslöst oder behandelt.

So erstellen Sie ein einfaches ASP.NET-Serversteuerelement

  1. Definieren Sie eine Klasse, die direkt oder indirekt von der System.Web.UI.Control-Klasse abgeleitet ist.

    using System;
    using System.Web.UI;
    public class FirstControl : Control{...}
    [Visual Basic]
    Imports System
    Imports System.Web.UI
    Public Class FirstControl   Inherits Control
    End Class
    

    Durch die using-Direktive kann im Code auf Typen eines Namespace verwiesen werden, ohne deren vollständigen Namen zu verwenden. Auf diese Weise wird Control in System.Web.UI.Control aufgelöst.

  2. Schließen Sie das Steuerelement in einem Namespace ein. Sie können dafür einen bestehenden Namespace verwenden oder einen neuen definieren. Der Name des Namespaces ist der Wert des Pseudoattributs der Register-Seitendirektive. (Zum Beispiel <%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %>). Am Ende dieses Themas finden Sie ein Beispiel für die Verwendung eines benutzerdefinierten Steuerelements auf einer ASP.NET-Seite.

    namespace CustomControls
    {
          public class FirstControl : Control {...}
    ...
    }
    [Visual Basic]
    Namespace CustomControls
       Public Class FirstControl
          Inherits Control
          ...
       End Class
    End Namespace
    
  3. Definieren Sie die für das Steuerelement benötigten Eigenschaften. Im folgenden Codefragment wird eine Eigenschaft namens Message definiert. Eigenschaften sind vergleichbar mit "intelligenten" Feldern, die über Accessormethoden verfügen.

    private String message = "Hello";
    //The Message property.
          public virtual String Message{
                get{
                      return message;
                }
                set{
                      message = value;
                }
          }
    [Visual Basic]
    Private _message As String = "Hello"
    Public Overridable Property Message() As String
       Get
          Return _message
       End Get
       Set
          _message = value
       End Set
    End Property
    

    Weitere Informationen über Eigenschaften finden Sie unter Übersicht über Eigenschaften. Informationen über die Definition von Eigenschaften, deren Zustand bei Schleifen erhalten bleibt, finden Sie unter Beibehalten des Status in einem Steuerelement.

  4. Überschreiben Sie die Render-Methode, die das Steuerelement von Control geerbt hat. Mit dieser Methode wird die Logik für das Senden von HTML-Code an den Clientbrowser bereitgestellt. Der durch das Steuerelement an den Client gesendete HTML-Code wird im folgenden Beispiel an die Write-Methode einer System.Web.UI.HtmlTextWriter-Instanz als Zeichenkettenargument übergeben.

    protected override void Render( HtmlTextWriter writer)
                {
                writer.Write("<font> "+ this.Message + "<br>" +
                            "The date and time on the server: " +      
                             System.DateTime.Now.ToLongTimeString()
                             + "</font>");
                }
    [Visual Basic]
    Protected Overrides Sub Render(writer As HtmlTextWriter)
       writer.Write(("<font> " & Me.Message & "<br>" & _
          "The time on the server is " & _
          System.DateTime.Now.ToLongTimeString() & _
          "</font>"))
    End Sub
    

    Bei der System.DateTime-Klasse, auf die in diesem Codefragment zugegriffen wird, handelt es sich um eine Hilfsklasse, mit der Angaben von Datum und Uhrzeit bereitgestellt werden. Beachten Sie, dass diese Klasse auf dem Server aufgerufen wird und somit die Serverzeit zurückgibt.

    Im Codefragment wird reiner HTML-Code einfach als Zeichenkettenargument an die Write-Methode von HtmlTextWriter übergeben. Ausführliche Informationen über die Verwendung der Methoden von HtmlTextWriter zur einfachen Wiedergabe von HTML-Code und eines Steuerelements, das von WebControl abgeleitet ist, finden Sie unter Darstellen eines ASP.NET-Serversteuerelements.

    Zur Vereinfachung wird in diesem Beispiel FirstControl von Control abgeleitet. Wenn sie ein Steuerelement erstellen, das sich selbst darstellt, sollte es aus der System.Web.UI.WebControls.WebControl-Klasse abgeleitet werden, damit es die spezifischen Eigenschaften der Benutzeroberfläche erben kann.

  5. Fügen Sie Laufzeit- und Entwurfszeitattribute hinzu, um für das Steuerelement benutzerspezifische Metadaten bereitzustellen. Einige Steuerelemente erfordern Laufzeitattribute. Dazu gehören beispielsweise solche Steuerelemente, die Vorlagen offen legen, Datenbindung ausführen oder benutzerdefinierte Analyselogik benötigen. Beispiele von Laufzeitattributen finden Sie unter Entwickeln eines Steuerelements mit Vorlagen. Entwurfszeitattribute sind erforderlich, wenn das Steuerelement in einem visuellen Designer wie z. B. Visual Studio .NET verwendet werden soll. Entwurfszeitattribute werden nicht von der Common Language Runtime benötigt, aber sie stellen Metadaten bereit, die zum Anzeigen eines Steuerelements zur Entwurfszeit erforderlich sind. Im unten dargestellten Codefragment wird auf die Message-Eigenschaft, die in Schritt 2 definiert wurde, ein Entwurfszeitattribut angewendet.

    [Description("A message string to display to the user")]
    public virtual String Message{...}
    [Visual Basic]
    <Description("A message string to display to the user")> _
    Public Overridable Property Message() As String
       ...
    End Property
    

    Weitere Informationen über Entwurfszeitattribute finden Sie unter Entwurfszeitattribute für Komponenten und Attribute und Entwurfszeitunterstützung.

  6. Führen Sie folgende Schritte zur Speicherung, Kompilierung und Weitergabe des Steuerelements aus:

    1. Erstellen Sie im Stammverzeichnis der Anwendung ein Unterverzeichnis namens /bin.
    2. Kompilieren Sie die Quelldatei in eine Assembly (.dll), und speichern Sie die Assembly im Unterverzeichnis /bin der Anwendung ab.

    Wurde der Quellcode beispielsweise in C# geschrieben und unter dem Dateinamen FirstControl.cs gespeichert, kann aus dem Verzeichnis, in dem sich die Quellcodedatei befindet, folgender Befehl ausgeführt werden.

    csc /t[arget]:library /out:[path to bin]bin\CustomControls.dll /r[eference]:System.Web.dll /r:System.dll FirstControl.cs
    

    Mit der Option /r wird dem Compiler mitgeteilt, auf welche Assemblies das Steuerelement verweist.

    Das Steuerelement ist jetzt kompiliert und kann von jeder ASP.NET-Seite, die sich im Stammverzeichnisses der Anwendung oder in einem seiner Unterverzeichnisse befindet, verwendet werden.

Im Folgenden wird der vollständige Code für FirstControl angegeben. Das Steuerelement ist im Namespace CustomControls eingeschlossen.

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControls
{
      public class FirstControl : Control
      {
            private String message = "Hello";
            
            public virtual String Message
            {
                  get
                  {
                        return message;
                  }
                  set
                  {
                        message = value;
                  }
            }
            
            protected override void Render( HtmlTextWriter writer)
            {
            writer.Write("<font> "
                        + this.Message + "<br>" + "The time on the server is " + System.DateTime.Now.ToLongTimeString()
                        + "</font>");
                  
            }
      
      }
}
[Visual Basic]
Option Explicit
Option Strict

Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace CustomControls
   Public Class FirstControl
      Inherits Control
      Private _message As String = "Hello"
      
      Public Overridable Property Message() As String
         Get
            Return _message
         End Get
         Set
            _message = value
         End Set
      End Property
      
      Protected Overrides Sub Render(writer As HtmlTextWriter)
         writer.Write(("<font> " + Me.Message + "<br>" + "The time on the server is " + System.DateTime.Now.ToLongTimeString() + "</font>"))
      End Sub
   End Class
End Namespace

Verwenden von FirstControl auf einer ASP.NET-Seite

Das im vorangegangenen Beispiel erstellte Steuerelement wird nun auf einer ASP.NET-Seite verwendet. Mit Hilfe der Register-Seitendirektive können Webseitenentwickler für den Namespace einen Alias vergeben. Außerdem wird damit für ASP.NET der Name der Assembly bereitgestellt, die das Steuerelement enthält. In diesem Beispiel erhält der Namespace CustomControls den Aliasnamen Custom.

<%@ Register TagPrefix="Custom" Namespace="CustomControls" Assembly = "CustomControls" %>
<html>
   <body>   
      <form  runat=server>          
          Here is a custom ASP.NET server control.<br><br>
          <Custom:FirstControl Message= "This control tells time. "  runat=server/> 
       <br>                               
      </form>
   </body>
</html>

Siehe auch

Eigenschaften von ASP.NET-Serversteuerelementen | Ereignisse in ASP.NET-Serversteuerelementen