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
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.
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
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.
Ü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.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.
Führen Sie folgende Schritte zur Speicherung, Kompilierung und Weitergabe des Steuerelements aus:
- Erstellen Sie im Stammverzeichnis der Anwendung ein Unterverzeichnis namens /bin.
- 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