Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale

Procedura: convalidare i dati del modello utilizzando gli attributi DataAnnotations

In questo argomento viene illustrato come utilizzare gli attributi dallo spazio dei nomi System.ComponentModel.DataAnnotations per specificare la convalida per i singoli campi nel modello di dati. Questi attributi definiscono criteri comuni di convalida, quali il controllo degli intervalli e i campi obbligatori. Gli attributi System.ComponentModel.DataAnnotations fanno in modo che MVC fornisca controlli di convalida sia client che server senza la necessità di codice aggiuntivo.

Gli attributi System.ComponentModel.DataAnnotations possono essere utilizzati con Entity Data Model (EDM), LINQ to SQL e altri modelli di dati. È anche possibile creare attributi di convalida personalizzati, Per ulteriori informazioni, vedere How to: Customize Data Field Validation in the Data Model Using Custom Attributes.

Come complemento a questo argomento è disponibile un progetto di Visual Studio con codice sorgente: Download.

Nell'illustrazione seguente vengono mostrati i messaggi di errore che vengono visualizzati automaticamente in un browser quando la convalida lato client non riesce.

Messaggi visualizzati nel browser in risposta agli errori di convalida

Errori di convalida

Per aggiungere la convalida utilizzando gli attributi DataAnnotations

  1. Aggiungere una classe al progetto in modo che contenga le definizioni parziali della classe. Per ulteriori informazioni, vedere How to: Customize Data Field Validation in the Data Model.

  2. Aggiungere una dichiarazione dello spazio dei nomi alla classe parziale che corrisponda allo spazio dei nomi del modello di dati utilizzato.

    NotaNota:

    Uno spazio dei nomi errato utilizzato in una classe parziale comporta una classe parziale naked, vale a dire una classe parziale che non è associata a nessun'altra classe. Una classe parziale naked è il motivo tipico del mancato riconoscimento degli attributi DataAnnotations da parte del modello di dati. Per evitare questo problema, è possibile copiare lo spazio dei nomi dal codice del modello di dati per assicurarsi di disporre dello spazio dei nomi corretto.

  3. Assegnare un nome alla classe parziale in modo che corrisponda alla dichiarazione della classe che rappresenta la tabella nel modello di dati e incollarla nel nuovo file della classe.

    NotaNota:

    È importante che i nomi della classe corrispondano esattamente. Il modo più semplice per assicurarsi che il nome della classe parziale corrisponda consiste nel copiarlo.

    Nell'esempio seguente viene illustrata una classe parziale per la tabella Product del database di esempio AdventureWorksLT_2008. In questo esempio, il database è rappresentato dallo spazio dei nomi MvcDA.

    using System.ComponentModel.DataAnnotations;  
    namespace MvcDA {
        [MetadataType(typeof(ProductMD))]
        public partial class Product {
            public class ProductMD {
                [StringLength(50),Required]
                public object Name { get; set; }
                [StringLength(15)]
                public object Color { get; set; }
                [Range(0, 9999)]
                public object Weight { get; set; }
              //  public object NoSuchProperty { get; set; }
            }
        }
    }
    

    Imports System.ComponentModel.DataAnnotations
    
    <MetadataType(GetType(ProductMD))> _
    Partial Public Class Product
    End Class
    
    Public Class ProductMD
        Private _Name As Object
        <StringLength(60)> _
        <Required()> _
        Public Property Name() As Object
            Get
                Return _Name
            End Get
            Set(ByVal value As Object)
                _Name = value
            End Set
        End Property
    
        Private _Color As Object
        <StringLength(60)> _
        Public Property Color() As Object
            Get
                Return _Color
            End Get
            Set(ByVal value As Object)
                _Color = value
            End Set
        End Property
    
        Private _Weight As Object
        <Required(), StringLength(50)> _
        Public Property Weight() As Object
            Get
                Return _Weight
            End Get
            Set(ByVal value As Object)
                _Weight = value
            End Set
        End Property
    
        'Private _NoSuchProperty As Object
        '<Required(), StringLength(30)> _
        'Public Property NoSuchProperty() As Object
        '    Get
        '        Return _NoSuchProperty
        '    End Get
        '    Set(ByVal value As Object)
        '        _NoSuchProperty = value
        '    End Set
        'End Property
    
    End Class
    
    NotaNota:

    La proprietà denominata NoSuchProperty viene inclusa nella classe e impostata come commento. È possibile utilizzare questa proprietà per testare la classe parziale, come descritto più avanti in questo argomento.

  4. Creare una classe associata (a volte denominata classe buddy) che contiene le proprietà della classe parziale che rappresentano la tabella.

    La classe associata può avere qualsiasi nome; per convenzione, in genere si aggiunge "MD" o "MetaData" al nome della classe della tabella. La classe associata deve essere utilizzata con i modelli EDM o LINQ to SQL perché i tipi CLR non possono contrassegnare le proprietà esistenti con nuovi attributi. Se si utilizzano direttamente gli oggetti CLR, a volte denominati oggetti POCO (Plain Old CLR Object), è possibile applicare direttamente gli attributi al modello.

  5. Associare la nuova classe alla classe della tabella mediante l'attributo MetadataTypeAttribute.

    Nell'esempio precedente, la nuova classe è associata alla classe della tabella nelle righe seguenti:

    [MetadataType(typeof(ProductMD))]
    

    <MetadataType(GetType(ProductMD))> _
    
  6. Applicare gli attributi System.ComponentModel.DataAnnotations alle proprietà. È possibile applicare qualsiasi numero di attributi a ogni proprietà.

Se le annotazioni dei dati applicate non vengono riconosciute, è necessario verificare che la classe parziale venga riconosciuta nel progetto. Nella procedura riportata di seguito viene suggerito un modo per testare la classe.

Per testare la classe parziale

  1. Aggiungere una proprietà alla classe parziale il cui nome non corrisponda a una proprietà nel modello di dati corrispondente.

    Ad esempio, rimuovere il commento dalla proprietà NoSuchProperty mostrata nell'esempio della procedura precedente.

  2. Eseguire il progetto e immetta i dati da convalidare.

    Se la classe parziale viene riconosciuta, quando si verifica la convalida viene generata un'eccezione InvalidOperationException con un messaggio simile al seguente:

    Il tipo di metadati associato per il tipo 'MvcDA.Product' contiene le proprietà o i campi sconosciuti seguenti: NoSuchProperty. Accertarsi che i nomi di questi membri corrispondano ai nomi delle proprietà del tipo principale.

    Se la classe parziale è naked, non viene generata alcuna eccezione. In tal caso, esaminare il nome della classe parziale per assicurarsi che corrisponda al nome della classe corrispondente nel modello di dati e che sia stato utilizzato lo spazio dei nomi corretto.

  3. Rimuovere la proprietà nella classe parziale aggiunta per il test.

Dopo avere aggiunto la convalida lato server, è possibile aggiungere la convalida lato client includendo i file di convalida di JavaScript necessari e abilitando la convalida lato client.

Per aggiungere la convalida lato client

  • Aggiungere i riferimenti ai file di convalida di JavaScript alla visualizzazione che contiene gli elementi che si desidera convalidare. È prassi comune includerli nel file Site.master in modo che vengano applicati a ogni visualizzazione.

    Nell'esempio seguente viene illustrato come fare riferimento ai file JavaScript richiesti per includere la convalida lato client. In questo esempio i riferimenti vengono effettuati alle versioni di debug delle librerie. Nell'esempio viene inoltre illustrato come chiamare il metodo EnableClientValidation per abilitare la convalida lato client. Un metodo comunemente impiegato per abilitare la convalida del client è aggiungere il codice seguente al file Site.master. Tuttavia, è possibile aggiungerlo anche alla pagina di visualizzazione che sta implementando la convalida lato client. Se si include il codice seguente nella pagina master, la convalida lato client viene abilitata automaticamente in tutte le visualizzazioni.

    <head runat="server">
      <script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.debug.js") %>" type="text/javascript"></script>
      <% Html.EnableClientValidation();%>
    </head> 
    

    <head runat="server">
      <script src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>" type="text/javascript"></script>
      <script src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.debug.js") %>" type="text/javascript"></script>
      <% Html.EnableClientValidation()%>
    </head>
    

Per compilare il codice di esempio, è necessario quanto segue:

  • Microsoft Visual Studio 2008 Service Pack 1 o Visual Web Developer 2008 Express Edition Service Pack 1.

  • Database di esempio AdventureWorksLT_2008. Per informazioni su come scaricare e installare il database di esempio di SQL Server, vedere Microsoft SQL Server Product Samples: Database (informazioni in lingua inglese) nel sito Web CodePlex. Assicurarsi di installare la versione del database di esempio appropriata per la versione di SQL Server in esecuzione (Microsoft SQL Server 2005 o Microsoft SQL Server 2008).

  • Applicazione MVC con un modello EDM creato dal database di esempio AdventureWorksLT_2008. Per ulteriori informazioni, vedere l'esercitazione Creating Model Classes with the Entity Framework nel sito Web ASP.NET.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft