Condividi tramite


Procedura: convalidare i dati

In questo argomento viene descritto come si aggiungono gli attributi di convalida a proprietà ed entità per applicare le regole di convalida. In WCF RIA Services vengono forniti diversi attributi di convalida che eseguono controlli di convalida comuni e viene fornito anche l'attributo CustomValidationAttribute per consentire di specificare controlli di convalida personalizzati.

I seguenti attributi di convalida predefiniti sono forniti da RIA Services :

Gli attributi di convalida si aggiungono alle entità nel progetto server e vengono propagati alle rappresentazioni delle entità client generate. Durante il runtime, le regole di convalida vengono applicate ai dati dall'utente. È necessario aggiungere le classi di metadati per aggiungere gli attributi di convalida. Per ulteriori informazioni su questa procedura, vedere Procedura: aggiungere classi di metadati.

In questo argomento viene descritto come aggiungere gli attributi di convalida personalizzati e predefiniti.

Per aggiungere attributi di convalida forniti da Servizi RIA

  1. Aggiungere una classe di metadati per la classe di entità, come descritto in Procedura: aggiungere classi di metadati.

  2. Per le proprietà o le entità che si desidera convalidare, aggiungere gli attributi di convalida che eseguono la convalida.

    Nell'esempio seguente vengono illustrati gli attributi RequiredAttribute e StringLengthAttribute applicati a una proprietà denominata AddressLine1.

    <Required()> _
    <StringLength(60)> _
    <RoundtripOriginal()> _
    Public AddressLine1 As String
    
    [Required]
    [StringLength(60)]
    [RoundtripOriginal]
    public string AddressLine1 { get; set; }
    
  3. Compilare la soluzione (CTRL+MAIUSC+B).

  4. Nell'applicazione Silverlight, aprire il file di codice generato nella cartella Generated_Code e notare come gli attributi di convalida siano stati applicati nel codice client.

Per aggiungere un attributo di convalida personalizzato

  1. Aggiungere una classe di metadati per la classe di entità, come descritto in Procedura: aggiungere classi di metadati.

  2. Aggiungere un file di codice condiviso utilizzando il modello di denominazione *.shared.cs o *.shared.vb.

    Il file di codice conterrà l'oggetto di convalida personalizzato.

  3. Aggiungere un metodo che determina se i dati sono validi.

    Il metodo deve essere public e static (o Public e Shared in Visual Basic). Deve restituire un elemento ValidationResult per indicare il risultato del controllo di convalida. Quando si definisce la classe di convalida personalizzata, è necessario fornire almeno un codice diverso dalle proprietà implementate automaticamente affinché la classe venga generata correttamente nel progetto client.

    Nell'esempio seguente viene illustrata una classe denominata ProductValidator con un metodo denominato IsProductValid che convalida un'entità Product. Quando i dati non sono validi, viene restituito il messaggio di errore e il nome della proprietà non convalidata.

    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. Per l'entità o la proprietà che si desidera convalidare, aggiungere l'attributo CustomValidationAttribute e passare il tipo dell'oggetto di convalida e il nome del metodo che esegue la convalida.

    Nell'esempio riportato di seguito viene illustrata l'applicazione dell'attributo CustomValidationAttribute a un'entità. Il tipo di oggetto di convalida è ProductValidator e il metodo è 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. Compilare la soluzione (CTRL+MAIUSC+B).

  6. Nell'applicazione Silverlight, aprire la cartella Generated_Code. Notare che il file di codice condiviso è presente nella cartella e che CustomValidationAttribute è stato applicato all'entità.