Wprowadzenie z Entity Framework 4,0 Database First i ASP.NET 4 Web Forms — część 8

Autor Dykstra

Przykładowa aplikacja internetowa Contoso University pokazuje, jak tworzyć aplikacje ASP.NET Web Forms przy użyciu Entity Framework 4,0 i programu Visual Studio 2010. Aby uzyskać informacje na temat serii samouczków, zobacz pierwszy samouczek w serii

Używanie funkcji danych dynamicznych do formatowania i walidacji danych

W poprzednim samouczku zaimplementowano procedury składowane. W tym samouczku przedstawiono sposób, w jaki funkcje danych dynamicznych mogą zapewnić następujące korzyści:

  • Pola są automatycznie formatowane pod kątem wyświetlania na podstawie ich typu danych.
  • Pola są automatycznie sprawdzane na podstawie ich typu danych.
  • Możesz dodać metadane do modelu danych, aby dostosować formatowanie i zachowanie walidacji. Gdy to zrobisz, możesz dodać reguły formatowania i walidacji tylko w jednym miejscu i są one automatycznie stosowane wszędzie tam, gdzie uzyskujesz dostęp do pól przy użyciu dynamicznych kontrolek danych.

Aby zobaczyć, jak to działa, zmienisz kontrolki służące do wyświetlania i edytowania pól na istniejącej stronie uczniów. aspx , a następnie dodasz metadane dotyczące formatowania i walidacji do pól Nazwa i Data typu jednostki Student.

Image01

Korzystanie z kontrolek DynamicField i DynamicControl

Otwórz stronę Students. aspx i w kontrolce StudentsGridView Zamień nazwę i datę rejestracji TemplateField elementy na następujące znaczniki:

<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" />

W tym znaczniku są stosowane kontrolki DynamicControl zamiast formantów TextBox i Label w polu szablonu nazwa ucznia, a w przypadku daty rejestracji jest stosowana kontrolka DynamicField. Nie określono ciągów formatu.

Dodaj kontrolkę ValidationSummary po kontrolce StudentsGridView.

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

W kontrolce SearchGridView Zastąp znaczniki dla kolumny Nazwa i Data rejestracji , jak w kontrolce StudentsGridView, z wyjątkiem pominięcie elementu EditItemTemplate. Element Columns kontrolki SearchGridView zawiera teraz następujące znaczniki:

<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" />

Otwórz Students.aspx.cs i Dodaj następującą instrukcję using:

using ContosoUniversity.DAL;

Dodaj procedurę obsługi dla zdarzenia Init strony:

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

Ten kod określa, że dane dynamiczne będą udostępniać formatowanie i sprawdzanie poprawności w tych kontrolkach powiązanych z danymi dla pól jednostki Student. Jeśli zostanie wyświetlony komunikat o błędzie podobny do poniższego przykładu podczas uruchamiania strony, zazwyczaj oznacza to, że zapomniano wywołać metodę EnableDynamicData w 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.

Uruchom stronę.

Image03

W kolumnie Data rejestracji zostanie wyświetlony czas wraz z datą, ponieważ typ właściwości to DateTime. Naprawisz to później.

Na razie należy zauważyć, że dane dynamiczne automatycznie zapewniają podstawowe sprawdzanie poprawności danych. Na przykład kliknij pozycję Edytuj, wyczyść pole Date, kliknij przycisk Aktualizuji zobaczysz, że dane dynamiczne automatycznie czynią to pole wymagane, ponieważ wartość nie dopuszcza wartości null w modelu danych. Na stronie zostanie wyświetlona gwiazdka po polu i komunikat o błędzie w kontrolce ValidationSummary:

Image05

Możesz pominąć formant ValidationSummary, ponieważ można także trzymać wskaźnik myszy nad gwiazdką, aby wyświetlić komunikat o błędzie:

Image06

Dane dynamiczne będą również sprawdzać poprawność danych wprowadzonych w polu Data rejestracji :

Image04

Jak widać, jest to ogólny komunikat o błędzie. W następnej sekcji zobaczysz, jak dostosować komunikaty, a także reguły sprawdzania poprawności i formatowania.

Dodawanie metadanych do modelu danych

Zazwyczaj chcesz dostosować funkcje udostępniane przez dane dynamiczne. Można na przykład zmienić sposób wyświetlania danych i zawartość komunikatów o błędach. Zwykle dostosowuje się również reguły sprawdzania poprawności danych w celu zapewnienia większej funkcjonalności, niż dane dynamiczne są automatycznie oparte na typach danych. W tym celu należy utworzyć klasy częściowe, które odpowiadają typom jednostek.

W Eksplorator rozwiązańkliknij prawym przyciskiem myszy projekt ContosoUniversity , wybierz polecenie Dodaj odwołaniei Dodaj odwołanie do System.ComponentModel.DataAnnotations.

Image11

W folderze dal Utwórz nowy plik klasy, nadaj mu nazwę student.csi Zastąp kod szablonu w następującym kodzie.

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; }
    }
}

Ten kod tworzy klasę częściową dla jednostki Student. Atrybut MetadataType stosowany do tej klasy częściowej identyfikuje klasę, która jest używana do określania metadanych. Klasa metadanych może mieć dowolną nazwę, ale przy użyciu nazwy jednostki i "Metadata" jest powszechną procedurą.

Atrybuty stosowane do właściwości w klasie metadanych określają formatowanie, walidację, reguły i komunikaty o błędach. Podane tutaj atrybuty będą miały następujące wyniki:

  • EnrollmentDate będzie wyświetlana jako Data (bez godziny).
  • Pola nazw nie mogą zawierać więcej niż 25 znaków i został podany niestandardowy komunikat o błędzie.
  • Wymagane są oba pola nazw, a podano niestandardowy komunikat o błędzie.

Ponownie uruchom stronę uczniów. aspx i zobaczysz, że daty są teraz wyświetlane bez godzin:

Image08

Edytuj wiersz i spróbuj wyczyścić wartości w polach Nazwa. Gwiazdki wskazujące błędy pola są wyświetlane zaraz po opuszczeniu pola, przed kliknięciem przycisku Aktualizuj. Po kliknięciu przycisku Aktualizujna stronie zostanie wyświetlony tekst komunikatu o błędzie określony przez użytkownika.

Image10

Spróbuj wprowadzić nazwy dłuższe niż 25 znaków, kliknij przycisk Aktualizuj, a na stronie zostanie wyświetlony tekst komunikatu o błędzie określony przez użytkownika.

Image09

Teraz, po skonfigurowaniu tych reguł formatowania i walidacji w metadanych modelu danych, reguły zostaną automatycznie zastosowane na każdej stronie, która wyświetla lub dopuszcza zmiany w tych polach, tak długo, jak w przypadku formantów DynamicControl lub DynamicField. Zmniejsza to ilość nadmiarowego kodu, który trzeba napisać, co ułatwia programowanie i testowanie oraz zapewnia spójność formatowania i walidacji danych w całej aplikacji.

Więcej informacji

Ten zbiór samouczków znajduje się na Wprowadzenie z Entity Framework. Aby uzyskać więcej zasobów ułatwiających nauczenie się, jak korzystać z Entity Framework, przejdź do pierwszego samouczka w następnej Entity Framework serii samouczków lub odwiedź następujące witryny: