Compartir a través de


Validar datos

En este tema se describe cómo agregar atributos de validación a propiedades y entidades para aplicar reglas de validación. WCF RIA Services proporciona varios atributos de validación que realizan comprobaciones de validación comunes y también proporciona el atributo CustomValidationAttribute para permitir especificar las comprobaciones de validación personalizadas.

RIA Services proporciona los siguientes atributos de validación predeterminados:

Puede agregar atributos de validación a entidades en el proyecto de servidor y esos atributos de validación se propagan a sus representaciones de entidad de cliente generadas. En tiempo de ejecución, las reglas de validación se aplican a los datos del usuario. Debe agregar clases de metadatos para agregar atributos de validación. Para obtener más información sobre cómo realizar esta operación, vea Agregar clases de metadatos.

En este tema se describe cómo agregar atributos de validación predeterminada y personalizada.

Para agregar atributos de validación proporcionados por RIA Services

  1. Agregue una clase de metadatos para la clase de entidad, como se describe en Agregar clases de metadatos.

  2. En las propiedades o la entidad que desea validar, agregue los atributos de validación que realizan la validación.

    En el siguiente ejemplo se muestran los atributos StringLengthAttribute y RequiredAttribute aplicados a una propiedad denominada AddressLine1.

    <Required()> _
    <StringLength(60)> _
    <RoundtripOriginal()> _
    Public AddressLine1 As String
    
    [Required]
    [StringLength(60)]
    [RoundtripOriginal]
    public string AddressLine1 { get; set; }
    
  3. Genere (Ctrl+Mayús+B) la solución.

  4. En la aplicación de Silverlight, abra el archivo de código generado en la carpeta Generated_Code y observe cómo los atributos de validación se han aplicado en el código de cliente.

Para crear un atributo de validación personalizado

  1. Agregue una clase de metadatos para la clase de entidad, como se describe en Agregar clases de metadatos.

  2. Agregue un archivo de código compartido utilizando el patrón de nombres *.shared.cs o *.shared.vb.

    El archivo de código contendrá el objeto de validación personalizado.

  3. Agregue un método que determine si los datos son válidos.

    El método debe ser public y static (o Public y Shared en Visual Basic). Debe devolver un elemento ValidationResult para indicar el resultado de la comprobación de validación. Cuando defina la clase de validación personalizada, debe proporcionar al menos algún fragmento de código distinto de las propiedades implementadas automáticamente para que la clase se genere correctamente en el proyecto de cliente.

    En el siguiente ejemplo se muestra una clase denominada ProductValidator con un método denominado IsProductValid que valida una entidad Product. Cuando los datos no sean válidos, devolverá el mensaje de error y el nombre de la propiedad que produjo un error en la validación.

    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. En la entidad o la propiedad que desea validar, agregue el atributo CustomValidationAttribute y pase el tipo del objeto de validación y el nombre del método que realiza la validación.

    En el siguiente ejemplo se muestra el atributo CustomValidationAttribute aplicado a una entidad. El tipo de objeto de validación es ProductValidator y el método es 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. Genere (Ctrl+Mayús+B) la solución.

  6. En la aplicación de Silverlight, abra la carpeta Generated_Code. Observe que el archivo de código compartido existe en la carpeta y cómo el atributo CustomValidationAttribute se aplica a la entidad.