How to: Validate Data
[ This document was written for WCF Services Version 1 Service Pack 2 and might not be up to date
Please see Release Notes or Changelog for a list of changes since WCF RIA Services ]
This topic describes how you add validation attributes to properties and entities to enforce validation rules. Open Ria Services provides several validation attributes that perform common validation checks, and also provides the CustomValidationAttribute attribute to enable you to specify customized validation checks.
The following default validation attributes are provided by Open Ria Services:
You add the validation attributes to entities in the server project and those validation attribute are propagated to their generated client entity representations. At runtime, the validation rules are applied to data from the user. You must add metadata classes to add validation attributes. For more information on how to do this, see How to: Add Metadata Classes.
This topic describes how to add default and custom validation attributes.
- 1.
- 2.On the properties or entity that you want to validate, add the validation attributes that perform the validation.The following example shows the RequiredAttribute and StringLengthAttribute attributes applied to a property named AddressLine1.<Required()> _<StringLength(60)> _Public AddressLine1 As String[Required][StringLength(60)]public string AddressLine1;
- 3.Build (Ctrl+Shift+B) the solution.
- 4.In the Silverlight application, open the generated code file in the Generated_Code folder, and notice how the validation attributes have been applied in the client code.
- 1.
- 2.Add a shared code file by using the *.shared.cs or *.shared.vb naming pattern.The code file will contain the custom validation object.
- 3.Add a method that determines whether the data is valid.The method must be public and static (or Public and Shared in Visual Basic). It must return a ValidationResult to indicate the result of the validation check. When you define the customized validation class, you must provide at least some code other than auto-implemented properties for the class to be correctly generated in the client project.The following example shows a class named ProductValidator with a method named IsProductValid that validates a Product entity. When the data is not valid, you return the error message and the name of the property that failed validation.Public Class ProductValidatorPublic Shared Function IsProductValid(ByVal productToValidate As Product, ByVal context As ValidationContext)If (productToValidate.ListPrice < (CDec(0.8) * productToValidate.StandardCost)) ThenReturn New ValidationResult("ListPrice is below 80 percent of StandardCost.")ElseReturn ValidationResult.SuccessEnd IfEnd FunctionEnd Classpublic 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.");}else{return ValidationResult.Success;}}}
- 4.On the entity or property that you want to validate, add the CustomValidationAttribute attribute and pass the type of the validation object and the name of the method that performs the validation.The following example shows the CustomValidationAttribute attribute applied to an entity. The validation object type is ProductValidator and the method is IsProductValid.<CustomValidation(GetType(ProductValidator), "IsProductValid")> _<MetadataTypeAttribute(GetType(Product.ProductMetadata))> _Partial Public Class ProductFriend NotInheritable Class ProductMetadata'Metadata classes are not meant to be instantiated.Private Sub New()MyBase.New()End SubPublic Color As StringPublic DiscontinuedDate As Nullable(Of DateTime)Public ListPrice As DecimalPublic ModifiedDate As DateTimePublic Name As StringPublic ProductCategoryID As Nullable(Of Integer)Public ProductID As IntegerPublic ProductModelID As Nullable(Of Integer)Public ProductNumber As StringPublic rowguid As GuidPublic SellEndDate As Nullable(Of DateTime)Public SellStartDate As DateTime<Required()> _<StringLength(20)> _Public Size As StringPublic StandardCost As DecimalPublic ThumbNailPhoto() As BytePublic ThumbnailPhotoFileName As StringPublic Weight As Nullable(Of Decimal)End ClassEnd Class[CustomValidation(typeof(RIAServicesExample.Web.SharedCode.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.Build (Ctrl+Shift+B) the solution.
- 6.In the Silverlight application, open the Generated_Code folder. Notice the shared code file exists in the folder and how the CustomValidationAttribute is applied to the entity.
Last modified 1yr ago