Share via


Entwickeln eines Bestätigungssteuerelements

In diesem Abschnitt wird die Bestätigung im ASP.NET-Seitenframework erörtert und demonstriert, wie Sie eine eigene Bibliothek der Bestätigungsteuerelemente entwickeln.

Grundsätzlich umfasst die Bestätigung die Überprüfung der vom Benutzer eingegebenen Formulardaten. Es können jedoch auch andere Fehlerüberprüfungen durchgeführt werden. Zur Abstrahierung unter Einbeziehung der verschiedenen Szenarien, bei denen die Bestätigung zum Einsatz kommt, definiert .NET Framework die System.Web.UI.IValidator-Schnittstelle mit den folgenden Membern.

public interface IValidator
{
   void Validate();
   string ErrorMessage {get; set;}
   bool IsValid {get; set;}
}
[Visual Basic]
Public Interface IValidator
   Sub Validate()
   Property ErrorMessage As String
   Property IsValid As Boolean
End Interface

Die Validate-Methode führt eine Fehlerüberprüfungslogik aus und legt die IsValid-Eigenschaft fest. Die ErrorMessage-Eigenschaft enthält eine von einem Seitenentwickler bereitgestellte Fehlerzeichenfolge.

Die Page-Klasse legt die Validators-Eigenschaft offen, die eine Liste aller IValidator-Typen auf der Seite ist. Jede die IValidator-Schnittstelle implementierende Klasse wird als Bestätigung betrachtet und kann zur Validators-Eigenschaft der enthaltenden Seite hinzugefügt werden. Eine Seite verfolgt den Fehlerstatus ihrer Bestätigungen und aktualisiert den eigenen Gesamtfehlerstatus entsprechend.

Die häufigsten Bestätigungstypen sind Bestätigungssteuerelemente, die die Benutzeroberfläche auf dem Client darstellen, um Eingabefehler anzuzeigen. Informationen zu den mit .NET Framework SDK gelieferten Bestätigungssteuerelementen finden Sie unter Schnelleinstieg zu ASP.NET —> ASP.NET Web Forms —> Formularüberprüfung mit Serversteuerelementen. Die folgende Liste fasst die Merkmale von Bestätigungssteuerelementen in .NET Framework zusammen und ist somit eine praktische Hilfe bei der Erstellung einer Bestätigungssteuerelementbibliothek:

  • Bestätigungssteuerelemente sind von den Steuerelementen getrennt, die sie bestätigen. (Zur Einbeziehung in eine Überprüfung muss ein Serversteuerelement eine zu überprüfende Eigenschaft offen legen, die es mit dem ValidationPropertyAttribute markiert.)
  • Mehrere Bestätigungssteuerelemente können einem Eingabesteuerelement zugeordnet werden.
  • Die Darstellung und Fehlermeldung eines Bestätigungssteuerelements können durch den Seitenentwickler angepasst werden.
  • Bestätigungssteuerelemente sind skriptfähig und führen auf (Uplevel-)Clients dieselbe Fehlerprüfung wie auf dem Server aus.
  • Die Eingabefehler der Bestätigungssteuerelemente auf Uplevelclients werden ohne Serververzögerung angezeigt. Bestätigungsfehler für einzelne Felder werden auf dem Client angezeigt, sobald der Benutzer zu einem anderen Feld wechselt. Bestätigungsfehler erforderlicher Felder sowie eine Fehlerübersicht werden angezeigt, wenn der Benutzer das Formular sendet.
  • Seitenentwickler können clientseitige Skripts bereitstellen, die die von einem Bestätigungssteuerelement ausgeführte clientseitige Fehlerüberprüfung ergänzen oder ersetzen.

Die allgemeine Überprüfungsfunktionalität wird durch die abstrakte System.Web.UI.WebControls.BaseValidator-Basisklasse implementiert, die IValidator implementiert, clientseitige Skripts mit der Seite registriert und die grundlegende Darstellungslogik bereitstellt. Die konkreten Bestätigungsklassen (z. B. RequiredFieldValidator, RegularExpressionValidator und CustomValidator) sind von BaseValidator abgeleitet und fügen ihre eigene spezifische Funktionalität hinzu. Eine Zusammenfassung der Bestätigungsfehlermeldungen wird durch das ValidationSummary-Steuerelement bereitgestellt. ValidationSummary ist selbst keine Bestätigung (es implementiert IValidator nicht) und ist von WebControl abgeleitet. ValidationSummary greift auf die Validators-Auflistung einer Seite zu, um die Fehlermeldung für jede mit der Seite registrierte Bestätigung zu erhalten.

Wenn Sie das .NET Framework SDK oder Visual Studio .NET installiert haben, können Sie die von BaseValidator ausgegebene Skriptbibliothek anzeigen, indem Sie die entsprechende Datei im virtuellen Stammverzeichnis aspnet_client/system_web/<Installierte SDK-Version> öffnen. Weitere Informationen zur Ausgabe clientseitiger Skripts finden Sie unter Clientfunktionalität in einem Serversteuerelement.

Die folgende Erörterung beschreibt die wichtigsten Schritte bei der Entwicklung eines Bestätigungssteuerelements, das eine grundlegende Bestätigungsfunktionalität bereitstellt. Führen Sie diese Schritte aus, wenn Sie ein grundlegendes Bestätigungssteuerelement für eine benutzerdefinierte Bestätigungsbibliothek oder ein benutzerdefiniertes Bestätigungssteuerelement entwickeln möchten, dass alle notwendigen Bestätigungsfunktionen bietet. Die Ausführung dieser Schritte ist für einfachere Szenarien (z. B für die Erweiterung einer vorhandenen Bestätigung) nicht notwendig. Für diese Fälle finden Sie Beispiele zur Erweiterung der Basisbestätigung unter Beispiele für Bestätigungssteuerelemente.

So implementieren Sie eine Bestätigung

Hinweis   Die Schritte 1 bis 4 in der folgenden Liste treffen für alle Bestätigungen zu, also auch für die serverseitigen Bestätigungsklassen, die keine Steuerelemente sind. Die Schritte 5 bis 10 treffen für Steuerelemente zu, die eine Benutzeroberfläche bereitstellen und ein clientseitiges Skript ausgeben.

  1. Definieren Sie eine Klasse, die IValidator implementiert. Wenn die Bestätigung ein Steuerelement ist, muss sie zusätzlich direkt oder indirekt von Control abgeleitet werden. Bestätigungssteuerelemente in .NET Framework sind von System.Web.UI.WebControls.Label abgeleitet (siehe folgendes Beispiel).

    public abstract class BaseDomValidator : Label, IValidator {...}
    [Visual Basic]
    MustInherit Public Class BaseDomValidator
       Inherits Label
       Implements IValidator
       ... 
    End Class
    

    Hinweis   Sofern die Bestätigung keine Basisklasse sein soll, muss sie nicht abstrakt sein.

  2. Implementieren Sie den Vertrag von IValidator. Das folgende Beispiel demonstriert die Implementierung von IValidator. Weitere Informationen hierzu finden Sie auch unter Beispiel für ein grundlegendes Bestätigungssteuerelement.

    public string ErrorMessage {
                get {
                    object o = ViewState["ErrorMessage"];
                    return((o == null) ? String.Empty : (string)o);
                }
                set {
                    ViewState["ErrorMessage"] = value;
                }
            }
    public bool IsValid {
                get {
                    return isValid;
                }
                set {
                    isValid = value;
                }
            }
    public void Validate() {
    ...
    // A base validator cannot supply all the validating logic.
    // You can implement common functionality here and invoke an 
    // abstract method that is overridden by derived classes to
    // provide validation logic.
                IsValid = EvaluateIsValid();
            }
    
    // This method is overridden by a concrete class that extends 
    // the base validator to supply specific validation logic.
    protected abstract bool EvaluateIsValid();    
    [Visual Basic]
    Public Property ErrorMessage() As String Implements IValidator.ErrorMessage
       Get
          Dim o As Object = ViewState("ErrorMessage")
          If o Is Nothing Then
             Return String.Empty
          Else
             Return CStr(o)
          End If
       End Get
       Set
          ViewState("ErrorMessage") = value
       End Set
    End Property
    
    Public Property IsValid() As Boolean Implements IValidator.IsValid
       Get
          Return _isValid
       End Get
       Set
          _isValid = value
       End Set
    End Property
    
    Public Sub Validate() Implements IValidator.Validate
       ...
       ' A base validator cannot supply all the validating logic.
       ' You can implement common functionality here and invoke an 
       ' abstract method that is overridden by derived classes to
       ' provide validation logic.
       IsValid = EvaluateIsValid()
    End Sub
    
    ' This method is overridden by a concrete class that extends 
    ' the base validator to supply specific validation logic.
    Protected MustOverride Function EvaluateIsValid() As Boolean
    
  3. Fügen Sie die Bestätigung der Validators-Eigenschaft ihrer enthaltenden Seite hinzu, wenn die Seite initialisiert wird, indem Sie die OnInit-Methode folgendermaßen außer Kraft setzen.

    protected override void OnInit(EventArgs e) {
                base.OnInit(e);
                Page.Validators.Add(this);
            }    
    [Visual Basic]
    Protected Overrides Sub OnInit(e As EventArgs)
       MyBase.OnInit(e)
       Page.Validators.Add(Me)
    End Sub    
    

    Hinweis   Wenn die Bestätigung kein Steuerelement ist, muss dieser Schritt vom Seitenentwickler in der Page_Load-Methode ausgeführt werden.

  4. Entfernen Sie die Bestätigung aus der Validators-Eigenschaft ihrer enthaltenden Seite, wenn die Seite entladen wird, indem Sie die OnUnload-Methode folgendermaßen außer Kraft setzen.

    protected override void OnUnload(EventArgs e) {
                if (Page != null) {
                    Page.Validators.Remove(this);
                }
                base.OnUnload(e);
            }    
    [Visual Basic]
    Protected Overrides Sub OnUnload(e As EventArgs)
       If Not (Page Is Nothing) Then
          Page.Validators.Remove(Me)
       End If
       MyBase.OnUnload(e)
    End Sub    
    

    Hinweis   Wenn die Bestätigung kein Steuerelement ist, muss dieser Schritt vom Seitenentwickler in der Page_Unload-Methode ausgeführt werden.

  5. Definieren Sie eine Eigenschaft, die es einem Benutzer ermöglicht, ein zu bestätigendes Eingabesteuerelement mit der Bestätigung zu verknüpfen. In ASP.NET-Bestätigungssteuerelementen hat diese Eigenschaft die Bezeichnung ControlToValidate und wird wie unter Beispiel für ein grundlegendes Bestätigungssteuerelement gezeigt definiert.

  6. Definieren Sie eine Eigenschaft, die Benutzern die Entscheidung offen lässt, ob das Steuerelement clientseitiges Skript ausgibt oder nicht. In ASP.NET-Bestätigungssteuerelementen hat diese Eigenschaft die Bezeichnung EnableClientScript und wird wie unter Beispiel für ein grundlegendes Bestätigungssteuerelement gezeigt definiert.

  7. Bereiten Sie die clientseitige Skriptbibliothek auf Verpackung mit dem Bestätigungssteuerelement vor, und legen Sie sie im richtigen Verzeichnis auf dem Server ab, so dass sie von anderen Anwendungen verwendet werden kann und keine Versionskonflikte hervorruft. Weitere Einzelheiten finden Sie in den Erörterungen unter Clientfunktionalität in einem Serversteuerelement. Ein Beispiel für eine Skriptbibliothek finden Sie unter Skriptbibliothek für Gültigkeitsprüfungsbeispiele.

  8. Rufen Sie die Methoden von Page auf, die clientseitiges Skript ausgeben. Einzelheiten finden Sie in den Erörterungen unter Clientfunktionalität in einem Serversteuerelement und bei der Implementierung unter Beispiel für ein grundlegendes Bestätigungssteuerelement. Diese Skripterstellungsmethoden werden von den Methoden PreRender und Render aufgerufen.

  9. Implementieren Sie die Darstellungslogik durch Außerkraftsetzen der Methoden AddAttributestoRender und Render. Ein Beispiel hierfür ist die Implementierung unter Beispiel für ein grundlegendes Bestätigungssteuerelement.

Alle hier gezeigten Schritte werden unter Beispiel für ein grundlegendes Bestätigungssteuerelement implementiert.

Siehe auch

Beispiele für Bestätigungssteuerelemente | Clientfunktionalität in einem Serversteuerelement