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
Fügen Sie wie unter Gewusst wie: Hinzufügen von Metadatenklassen beschrieben eine Metadatenklasse für die Entitätsklasse hinzu.
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; }
Erstellen Sie die Projektmappe (STRG+UMSCHALT+B).
Ö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
Fügen Sie wie unter Gewusst wie: Hinzufügen von Metadatenklassen beschrieben eine Metadatenklasse für die Entitätsklasse hinzu.
Fügen Sie unter Verwendung des
*.shared.cs
- oder*.shared.vb
-Benennungsmusters eine freigegebene Codedatei hinzu.Die Codedatei enthält das benutzerdefinierte Validierungsobjekt.
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 namensIsProductValid
, 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; } } } }
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 istIsProductValid
.<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; } }
Erstellen Sie die Projektmappe (STRG+UMSCHALT+B).
Ö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.