Bagikan melalui


Memulai Entity Framework 4.0 Database First dan ASP.NET 4 Web Forms - Bagian 8

oleh Tom Dykstra

Aplikasi web sampel Contoso University menunjukkan cara membuat aplikasi ASP.NET Web Forms menggunakan Entity Framework 4.0 dan Visual Studio 2010. Untuk informasi tentang seri tutorial, lihat tutorial pertama dalam seri

Menggunakan Fungsionalitas Data Dinamis untuk Memformat dan Memvalidasi Data

Dalam tutorial sebelumnya Anda menerapkan prosedur tersimpan. Tutorial ini akan menunjukkan kepada Anda bagaimana fungsionalitas Data Dinamis dapat memberikan manfaat berikut:

  • Bidang secara otomatis diformat untuk ditampilkan berdasarkan jenis datanya.
  • Bidang secara otomatis divalidasi berdasarkan jenis datanya.
  • Anda dapat menambahkan metadata ke model data untuk menyesuaikan perilaku pemformatan dan validasi. Saat Anda melakukan ini, Anda dapat menambahkan aturan pemformatan dan validasi hanya di satu tempat, dan aturan tersebut secara otomatis diterapkan di mana pun Anda mengakses bidang menggunakan kontrol Data Dinamis.

Untuk melihat cara kerjanya, Anda akan mengubah kontrol yang Anda gunakan untuk menampilkan dan mengedit bidang di halaman Students.aspx yang ada, dan Anda akan menambahkan metadata pemformatan dan validasi ke bidang nama dan tanggal tipe Student entitas.

Gambar01

Menggunakan DynamicField dan DynamicControl Controls

Buka halaman Students.aspx dan di StudentsGridView kontrol ganti elemen Nama dan Tanggal TemplateField Pendaftaran dengan markup berikut:

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

Markup ini menggunakan DynamicControl kontrol sebagai pengganti TextBox dan Label kontrol di bidang templat nama siswa, dan menggunakan DynamicField kontrol untuk tanggal pendaftaran. Tidak ada string format yang ditentukan.

ValidationSummary Tambahkan kontrol setelah StudentsGridView kontrol.

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

SearchGridView Di kontrol, ganti markup untuk kolom Nama dan Tanggal Pendaftaran seperti yang Anda lakukan di StudentsGridView kontrol, kecuali hilangkan EditItemTemplate elemen . Elemen Columns SearchGridView kontrol sekarang berisi markup berikut:

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

Buka Students.aspx.cs dan tambahkan pernyataan berikut using :

using ContosoUniversity.DAL;

Tambahkan handler untuk peristiwa halaman Init :

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

Kode ini menentukan bahwa Data Dinamis akan menyediakan pemformatan dan validasi dalam kontrol terikat data ini untuk bidang Student entitas. Jika Anda mendapatkan pesan kesalahan seperti contoh berikut saat menjalankan halaman, biasanya Anda lupa memanggil EnableDynamicData metode di 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.

Jalankan halaman.

Gambar03

Di kolom Tanggal Pendaftaran, waktu ditampilkan bersama dengan tanggal karena jenis properti adalah DateTime. Anda akan memperbaikinya nanti.

Untuk saat ini, perhatikan bahwa Data Dinamis secara otomatis menyediakan validasi data dasar. Misalnya, klik Edit, kosongkan bidang tanggal, klik Perbarui, dan Anda melihat bahwa Data Dinamis secara otomatis menjadikan ini bidang yang diperlukan karena nilainya tidak dapat diubah ke null dalam model data. Halaman menampilkan tanda bintang setelah bidang dan pesan kesalahan dalam ValidationSummary kontrol:

Gambar05

Anda dapat menghilangkan ValidationSummary kontrol, karena Anda juga dapat menahan penunjuk mouse di atas tanda bintang untuk melihat pesan kesalahan:

Gambar06

Data Dinamis juga akan memvalidasi bahwa data yang dimasukkan di bidang Tanggal Pendaftaran adalah tanggal yang valid:

Gambar04

Seperti yang Anda lihat, ini adalah pesan kesalahan umum. Di bagian berikutnya Anda akan melihat cara mengkustomisasi pesan serta aturan validasi dan pemformatan.

Menambahkan Metadata ke Model Data

Biasanya, Anda ingin menyesuaikan fungsionalitas yang disediakan oleh Data Dinamis. Misalnya, Anda dapat mengubah cara data ditampilkan dan konten pesan kesalahan. Anda biasanya juga menyesuaikan aturan validasi data untuk menyediakan lebih banyak fungsionalitas daripada yang disediakan Data Dinamis secara otomatis berdasarkan jenis data. Untuk melakukan ini, Anda membuat kelas parsial yang sesuai dengan jenis entitas.

Di Penjelajah Solusi, klik kanan proyek ContosoUniversity, pilih Tambahkan Referensi, dan tambahkan referensi ke System.ComponentModel.DataAnnotations.

Gambar11

Di folder DAL, buat file kelas baru, beri nama Student.cs, dan ganti kode templat di dalamnya dengan kode berikut.

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

Kode ini membuat kelas parsial untuk Student entitas. Atribut MetadataType yang diterapkan ke kelas parsial ini mengidentifikasi kelas yang Anda gunakan untuk menentukan metadata. Kelas metadata dapat memiliki nama apa pun, tetapi menggunakan nama entitas ditambah "Metadata" adalah praktik umum.

Atribut yang diterapkan ke properti di kelas metadata menentukan pemformatan, validasi, aturan, dan pesan kesalahan. Atribut yang ditampilkan di sini akan memiliki hasil berikut:

  • EnrollmentDate akan ditampilkan sebagai tanggal (tanpa waktu).
  • Kedua bidang nama harus 25 karakter atau kurang panjangnya, dan pesan kesalahan kustom disediakan.
  • Kedua bidang nama diperlukan, dan pesan kesalahan kustom disediakan.

Jalankan halaman Students.aspx lagi, dan Anda melihat bahwa tanggal sekarang ditampilkan tanpa waktu:

Gambar08

Edit baris dan coba hapus nilai dalam bidang nama. Tanda bintang yang menunjukkan kesalahan bidang muncul segera setelah Anda meninggalkan bidang, sebelum Anda mengklik Perbarui. Saat Anda mengklik Perbarui, halaman menampilkan teks pesan kesalahan yang Anda tentukan.

Gambar10

Coba masukkan nama yang lebih panjang dari 25 karakter, klik Perbarui, dan halaman menampilkan teks pesan kesalahan yang Anda tentukan.

Gambar09

Sekarang setelah Anda menyiapkan aturan pemformatan dan validasi ini dalam metadata model data, aturan akan secara otomatis diterapkan pada setiap halaman yang menampilkan atau mengizinkan perubahan pada bidang ini, selama Anda menggunakan DynamicControl atau DynamicField mengontrol. Ini mengurangi jumlah kode redundan yang harus Anda tulis, yang membuat pemrograman dan pengujian lebih mudah, dan memastikan bahwa pemformatan dan validasi data konsisten di seluruh aplikasi.

Informasi Selengkapnya

Ini menyimpulkan rangkaian tutorial tentang Memulai Kerangka Kerja Entitas. Untuk sumber daya lainnya untuk membantu Anda mempelajari cara menggunakan Kerangka Kerja Entitas, lanjutkan dengan tutorial pertama dalam seri tutorial Kerangka Kerja Entitas berikutnya atau kunjungi situs berikut: