如何验证数据 我们对实体和成员属性添加验证属性来实施验证规则。WCF RIA Service提供了几个验证属性来执行常用的验证检测,还提供了CustomValidationAttribute属性来执行自定义的验证检测。
如何验证数据
我们对实体和成员属性添加验证属性来实施验证规则。WCF RIA Service提供了几个验证属性来执行常用的验证检测,还提供了CustomValidationAttribute属性来执行自定义的验证检测。
在RIA Service中包含了如下的验证属性:
我们对实体和成员属性添加验证属性来实施验证规则。WCF RIA Service提供了几个验证属性来执行常用的验证检测,还提供了CustomValidationAttribute属性来执行自定义的验证检测。
在RIA Service中包含了如下的验证属性:
- DataTypeAttribute
- RangeAttribute
- RegularExpressionAttribute
- RequiredAttribute
- StringLengthAttribute
我们在服务端添加验证属性,这些属性会传递给生成的客户端实体。在运行时,这些验证规则会应用到客户输入的数据上。我们必须通过添加元数据类来添加这些验证属性。
添加一个验证属性
- 为实体类添加一个元数据类,可以参考上一节内容。
- 对想要验证的实体或成员属性,添加验证属性来执行验证。下面的例子示例如何对一个名字为Address1的成员属性添加验证。12345
[Required][StringLength(60)]publicstringAddressLine1;
- 生成解决方案。
- 在silverlight的应用项目中,打开Generated_Code文件下的代码文件,注意到在客户端代码中也应用了验证属性。
添加自定义验证属性
- 对实体类添加一个元数据类。
- 添加一个共享代码文件,以*.shared.cs命名。这个文件将会包含一个自定义验证对象。
- 添加一个方法来判断是否数据有效。这个方法必须是public和static,还必须返回一个ValidationResult来表示验证的结果。下面示例是一个有名为IsProductValid方法的ProductValidator类,这个方法验证一个Product实体。12345678910111213141516
publicclassProductValidator{publicstaticValidationResult IsProductValid(Product productToValidate, ValidationContext context){if(productToValidate.ListPrice < ((decimal).8 * productToValidate.StandardCost)){returnnewValidationResult("ListPrice is below 80 percent of StandardCost.");}else{returnValidationResult.Success;}}}
- 对象要验证的实体或成员属性,添加[CustomValidationAttribute]批注属性,并传递验证对象和执行验证的方法的名字。下面的示例显示了对一个实体应用[CustomValidation]属性,验证对象的类型是 ProductValidator,验证方法的名字是 IsProductValid。12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
[CustomValidation(typeof(RIAServicesExample.Web.SharedCode.ProductValidator),"IsProductValid")][MetadataTypeAttribute(typeof(Product.ProductMetadata))]publicpartialclassProduct{internalsealedclassProductMetadata{// Metadata classes are not meant to be instantiated.privateProductMetadata(){}publicstringColor;publicNullable<DATETIME> DiscontinuedDate;publicdecimalListPrice;publicDateTime ModifiedDate;publicstringName;publicNullable<INT> ProductCategoryID;publicintProductID;publicNullable<INT> ProductModelID;publicstringProductNumber;publicGuid rowguid;publicNullable<DATETIME> SellEndDate;publicDateTime SellStartDate;[Required()][StringLength(20)]publicstringSize;publicdecimalStandardCost;publicbyte[] ThumbNailPhoto;publicstringThumbnailPhotoFileName;publicNullable<DECIMAL> Weight;}}
- 生成解决方案。
- 在Silverlight客户端,打开Generated_Code文件夹下的文件。注意到在共享代码中CustomValidationAttribute应用到了实体上。