Condividi tramite


Introduzione a Entity Framework 4.0 Database First e ASP.NET 4 Web Form - Parte 8

di Tom Dykstra

L'applicazione Web di esempio Contoso University illustra come creare applicazioni Web Forms ASP.NET usando Entity Framework 4.0 e Visual Studio 2010. Per informazioni sulla serie di esercitazioni, vedere la prima esercitazione della serie

Uso della funzionalità Dynamic Data per formattare e convalidare i dati

Nell'esercitazione precedente sono state implementate stored procedure. Questa esercitazione illustra in che modo la funzionalità Dynamic Data può offrire i vantaggi seguenti:

  • I campi vengono formattati automaticamente per la visualizzazione in base al tipo di dati.
  • I campi vengono convalidati automaticamente in base al tipo di dati.
  • È possibile aggiungere metadati al modello di dati per personalizzare il comportamento di formattazione e convalida. Quando si esegue questa operazione, è possibile aggiungere le regole di formattazione e convalida in un'unica posizione e vengono applicate automaticamente ovunque si accede ai campi usando i controlli Dynamic Data.

Per verificare il funzionamento, i controlli usati per visualizzare e modificare i campi nella pagina di Students.aspx esistente verranno aggiunti metadati di formattazione e convalida ai campi nome e data del Student tipo di entità.

Immagine01

Uso di controlli DynamicField e DynamicControl

Aprire la pagina Students.aspx e nel StudentsGridView controllo sostituire gli elementi Name e Enrollment Date TemplateField con il markup seguente:

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <EditItemTemplate>
                    <asp:DynamicControl ID="LastNameTextBox" runat="server" DataField="LastName" Mode="Edit" />
                    <asp:DynamicControl ID="FirstNameTextBox" runat="server" DataField="FirstMidName" Mode="Edit" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

Questo markup usa DynamicControl i controlli al posto dei TextBox controlli e Label nel campo modello nome studente e usa un DynamicField controllo per la data di registrazione. Non vengono specificate stringhe di formato.

Aggiungere un ValidationSummary controllo dopo il StudentsGridView controllo .

<asp:ValidationSummary ID="StudentsValidationSummary" runat="server" ShowSummary="true"
        DisplayMode="BulletList" Style="color: Red" />

SearchGridView Nel controllo sostituire il markup per le colonne Name e Enrollment Date come è stato fatto nel StudentsGridView controllo, ad eccezione dell'omissione dell'elemento EditItemTemplate . L'elemento Columns del SearchGridView controllo contiene ora il markup seguente:

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

Aprire Students.aspx.cs e aggiungere l'istruzione seguente using :

using ContosoUniversity.DAL;

Aggiungere un gestore per l'evento della Init pagina:

protected void Page_Init(object sender, EventArgs e)
{
    StudentsGridView.EnableDynamicData(typeof(Student));
    SearchGridView.EnableDynamicData(typeof(Student));
}

Questo codice specifica che Dynamic Data fornirà formattazione e convalida in questi controlli associati a dati per i campi dell'entità Student . Se viene visualizzato un messaggio di errore simile all'esempio seguente quando si esegue la pagina, in genere significa che si è dimenticato di chiamare il EnableDynamicData metodo in Page_Init:

Could not determine a MetaTable. A MetaTable could not be determined for the data source 'StudentsEntityDataSource' and one could not be inferred from the request URL.

Eseguire la pagina.

Immagine03

Nella colonna Data registrazione, l'ora viene visualizzata insieme alla data perché il tipo di proprietà è DateTime. Questa operazione verrà risolta in un secondo momento.

Per il momento, si noti che Dynamic Data fornisce automaticamente la convalida dei dati di base. Ad esempio, fare clic su Modifica, deselezionare il campo data, fare clic su Aggiorna e si noterà che Dynamic Data rende automaticamente questo campo obbligatorio perché il valore non è nullable nel modello di dati. Nella pagina viene visualizzato un asterisco dopo il campo e un messaggio di errore nel ValidationSummary controllo :

Image05

È possibile omettere il ValidationSummary controllo, perché è anche possibile tenere premuto il puntatore del mouse sull'asterisco per visualizzare il messaggio di errore:

Image06

Dynamic Data convaliderà anche che i dati immessi nel campo Data registrazione siano una data valida:

Image04

Come si può notare, si tratta di un messaggio di errore generico. Nella sezione successiva verrà illustrato come personalizzare i messaggi, nonché le regole di convalida e formattazione.

Aggiunta di metadati al modello di dati

In genere, si vuole personalizzare le funzionalità fornite da Dynamic Data. Ad esempio, è possibile modificare la modalità di visualizzazione dei dati e il contenuto dei messaggi di errore. In genere si personalizzano anche le regole di convalida dei dati per offrire più funzionalità rispetto a quelle offerte automaticamente da Dynamic Data in base ai tipi di dati. A tale scopo, creare classi parziali che corrispondono ai tipi di entità.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ContosoUniversity, scegliere Aggiungi riferimento e aggiungere un riferimento a System.ComponentModel.DataAnnotations.

Image11

Nella cartella DAL creare un nuovo file di classe, denominarlo Student.cs e sostituire il codice del modello nel file con il codice seguente.

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace ContosoUniversity.DAL
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    public class StudentMetadata
    {
        [DisplayFormat(DataFormatString="{0:d}", ApplyFormatInEditMode=true)]
        public DateTime EnrollmentDate { get; set; }

        [StringLength(25, ErrorMessage = "First name must be 25 characters or less in length.")]
        [Required(ErrorMessage="First name is required.")]
        public String FirstMidName { get; set; }

        [StringLength(25, ErrorMessage = "Last name must be 25 characters or less in length.")]
        [Required(ErrorMessage = "Last name is required.")]
        public String LastName { get; set; }
    }
}

Questo codice crea una classe parziale per l'entità Student . L'attributo MetadataType applicato a questa classe parziale identifica la classe usata per specificare i metadati. La classe di metadati può avere qualsiasi nome, ma l'uso del nome dell'entità più "Metadata" è una pratica comune.

Gli attributi applicati alle proprietà nella classe di metadati specificano la formattazione, la convalida, le regole e i messaggi di errore. Gli attributi illustrati di seguito avranno i risultati seguenti:

  • EnrollmentDate verrà visualizzato come data (senza un'ora).
  • Entrambi i campi nome devono avere una lunghezza inferiore o inferiore a 25 caratteri e viene fornito un messaggio di errore personalizzato.
  • Entrambi i campi dei nomi sono obbligatori e viene fornito un messaggio di errore personalizzato.

Eseguire di nuovo la pagina Students.aspx e si noterà che le date sono ora visualizzate senza orari:

Image08

Modificare una riga e provare a cancellare i valori nei campi del nome. Gli asterischi che indicano errori di campo vengono visualizzati non appena si lascia un campo, prima di fare clic su Aggiorna. Quando si fa clic su Aggiorna, nella pagina viene visualizzato il testo del messaggio di errore specificato.

Image10

Provare a immettere nomi con più di 25 caratteri, fare clic su Aggiorna e nella pagina viene visualizzato il testo del messaggio di errore specificato.

Image09

Dopo aver configurato queste regole di formattazione e convalida nei metadati del modello di dati, le regole verranno applicate automaticamente a ogni pagina che visualizza o consente modifiche a questi campi, purché si usino DynamicControl o DynamicField controlli. In questo modo si riduce la quantità di codice ridondante che è necessario scrivere, semplificando la programmazione e il test e assicurando che la formattazione e la convalida dei dati siano coerenti in un'applicazione.

Ulteriori informazioni

Questa serie di esercitazioni è stata conclusa in Introduzione a Entity Framework. Per altre risorse per informazioni su come usare Entity Framework, continuare con la prima esercitazione nella serie di esercitazioni di Entity Framework successiva o visitare i siti seguenti: