Gewusst wie: Validieren von Daten

In diesem Thema wird beschrieben, wie Sie Eigenschaften und Entitäten Validierungsattribute hinzufügen, um Validierungsregeln zu erzwingen. WCF RIA Services stellt mehrere Validierungsattribute für allgemeine Validierungsüberprüfungen und auch das CustomValidationAttribute-Attribut bereit, mit dessen Hilfe Sie benutzerdefinierte Validierungsüberprüfungen angeben können.

In RIA Services sind die folgenden Standardvalidierungsattribute verfügbar:

Die Validierungsattribute werden Entitäten im Serverprojekt hinzugefügt, und diese Validierungsattribute werden an die zugehörigen generierten Cliententitätsdarstellungen weitergegeben. Zur Laufzeit werden die Validierungsregeln auf Daten vom Benutzer angewendet. Sie müssen Metadatenklassen hinzufügen, um Validierungsattribute hinzuzufügen. Weitere Informationen hierzu finden Sie unter Gewusst wie: Hinzufügen von Metadatenklassen.

In diesem Thema wird beschrieben, wie standardmäßige und benutzerdefinierte Validierungsattribute hinzugefügt werden.

So fügen Sie von RIA Services bereitgestellte Validierungsattribute hinzu

  1. Fügen Sie wie unter Gewusst wie: Hinzufügen von Metadatenklassen beschrieben eine Metadatenklasse für die Entitätsklasse hinzu.

  2. Fügen Sie den Eigenschaften oder der Entität, die Sie überprüfen möchten, die Validierungsattribute zum Durchführen der Validierung hinzu.

    Im folgenden Beispiel wurden die RequiredAttribute- und StringLengthAttribute-Attribute auf eine Eigenschaft mit dem Namen AddressLine1 angewendet.

    <Required()> _
    <StringLength(60)> _
    <RoundtripOriginal()> _
    Public AddressLine1 As String
    
    [Required]
    [StringLength(60)]
    [RoundtripOriginal]
    public string AddressLine1 { get; set; }
    
  3. Erstellen Sie die Projektmappe (STRG+UMSCHALT+B).

  4. Öffnen Sie in der Silverlight-Anwendung die generierte Codedatei im Ordner "Generated_Code". Die Validierungsattribute wurden im Clientcode angewendet.

So fügen Sie ein benutzerdefiniertes Validierungsattribut hinzu

  1. Fügen Sie wie unter Gewusst wie: Hinzufügen von Metadatenklassen beschrieben eine Metadatenklasse für die Entitätsklasse hinzu.

  2. Fügen Sie unter Verwendung des *.shared.cs- oder *.shared.vb-Benennungsmusters eine freigegebene Codedatei hinzu.

    Die Codedatei enthält das benutzerdefinierte Validierungsobjekt.

  3. Fügen Sie eine Methode hinzu, durch die bestimmt wird, ob die Daten gültig sind.

    Die Methode muss public und static sein (oder Public und Shared in Visual Basic). Sie muss ein ValidationResult zurückgeben, um das Ergebnis der Validierungsüberprüfung anzugeben. Damit die Klasse ordnungsgemäß im Clientprojekt generiert wird, müssen Sie beim Definieren der benutzerdefinierten Validierungsklasse zumindest etwas Code angeben, bei dem es sich nicht um automatisch implementierte Eigenschaften handelt.

    Das folgende Beispiel zeigt eine Klasse mit dem Namen ProductValidator mit einer Methode namens IsProductValid, durch die eine Product-Entität überprüft wird. Wenn die Daten nicht gültig sind, geben Sie die Fehlermeldung und den Namen der Eigenschaft zurück, bei der die Validierung fehlgeschlagen ist.

    Imports System.ComponentModel.DataAnnotations
    
    Public Class ProductValidator
        Public Shared Function IsProductValid(ByVal productToValidate As Product, ByVal context As ValidationContext)
            If (productToValidate.ListPrice < (CDec(0.8) * productToValidate.StandardCost)) Then
                Return New ValidationResult("ListPrice is below 80 percent of StandardCost.", New String() {"ListPrice"})
            Else
                Return ValidationResult.Success
            End If
        End Function
    End Class
    
    using System;
    using System.ComponentModel.DataAnnotations;
    
    namespace RIAServicesExample.Web
    {
        public class ProductValidator
        {
            public static ValidationResult IsProductValid(Product productToValidate, ValidationContext context)
            {
                if (productToValidate.ListPrice < ((decimal).8 * productToValidate.StandardCost))
                {
                    return new ValidationResult("ListPrice is below 80 percent of StandardCost.", new string[] { "ListPrice" });
                }
                else
                {
                    return ValidationResult.Success;
                }
            }
        }
    }
    
  4. Fügen Sie der Entität oder Eigenschaft, die Sie überprüfen möchten, das CustomValidationAttribute-Attribut hinzu, und übergeben Sie den Typ des Validierungsobjekts und den Namen der Methode für die Validierungsausführung.

    Im folgenden Beispiel wurde das CustomValidationAttribute-Attribut auf eine Entität angewendet. Der Validierungsobjekttyp ist ProductValidator, und die Methode ist IsProductValid.

    <CustomValidation(GetType(ProductValidator), "IsProductValid")> _
    <MetadataTypeAttribute(GetType(Product.ProductMetadata))> _
    Partial Public Class Product
        Friend NotInheritable Class ProductMetadata
    
            'Metadata classes are not meant to be instantiated.
            Private Sub New()
                MyBase.New()
            End Sub
    
            Public Color As String
    
            Public DiscontinuedDate As Nullable(Of DateTime)
    
            Public ListPrice As Decimal
    
            Public ModifiedDate As DateTime
    
            Public Name As String
    
            Public ProductCategoryID As Nullable(Of Integer)
    
            Public ProductID As Integer
    
            Public ProductModelID As Nullable(Of Integer)
    
            Public ProductNumber As String
    
            Public rowguid As Guid
    
            Public SellEndDate As Nullable(Of DateTime)
    
            Public SellStartDate As DateTime
    
            <Required()> _
            <StringLength(20)> _
            Public Size As String
    
            Public StandardCost As Decimal
    
            Public ThumbNailPhoto() As Byte
    
            Public ThumbnailPhotoFileName As String
    
            Public Weight As Nullable(Of Decimal)
        End Class
    End Class
    
    [CustomValidation(typeof(ProductValidator), "IsProductValid")]
    [MetadataTypeAttribute(typeof(Product.ProductMetadata))]
    public partial class Product
    {
    
        internal sealed class ProductMetadata
        {
    
            // Metadata classes are not meant to be instantiated.
            private ProductMetadata()
            {
            }
    
            public string Color;
    
            public Nullable<DateTime> DiscontinuedDate;
    
            public decimal ListPrice;
    
            public DateTime ModifiedDate;
    
            public string Name;
    
            public Nullable<int> ProductCategoryID;
    
            public int ProductID;
    
            public Nullable<int> ProductModelID;
    
            public string ProductNumber;
    
            public Guid rowguid;
    
            public Nullable<DateTime> SellEndDate;
    
            public DateTime SellStartDate;
    
            [Required()]
            [StringLength(20)]
            public string Size;
    
            public decimal StandardCost;
    
            public byte[] ThumbNailPhoto;
    
            public string ThumbnailPhotoFileName;
    
            public Nullable<decimal> Weight;
        }
    }
    
  5. Erstellen Sie die Projektmappe (STRG+UMSCHALT+B).

  6. Öffnen Sie in der Silverlight-Anwendung den Ordner "Generated_Code". Die freigegebene Codedatei ist im Ordner vorhanden, und das CustomValidationAttribute-Attribut wurde auf die Entität angewendet.