Bagikan melalui


Validasi dengan Validator Anotasi Data (C#)

oleh Microsoft

Manfaatkan Model Anotasi Data Binder untuk melakukan validasi dalam aplikasi MVC ASP.NET. Pelajari cara menggunakan berbagai jenis atribut validator dan bekerja dengannya di Microsoft Entity Framework.

Dalam tutorial ini, Anda mempelajari cara menggunakan validator Anotasi Data untuk melakukan validasi dalam aplikasi MVC ASP.NET. Keuntungan menggunakan validator Anotasi Data adalah memungkinkan Anda melakukan validasi hanya dengan menambahkan satu atau beberapa atribut – seperti atribut Wajib atau StringLength – ke properti kelas.

Penting untuk dipahami bahwa Model Anotasi Data Binder bukan bagian resmi dari kerangka kerja Microsoft ASP.NET MVC. Meskipun Model Anotasi Data Binder dibuat oleh tim Microsoft ASP.NET MVC, Microsoft tidak menawarkan dukungan produk resmi untuk Model Anotasi Data Binder dijelaskan dan digunakan dalam tutorial ini.

Menggunakan Model Anotasi Data Binder

Untuk menggunakan Model Anotasi Data Binder dalam aplikasi MVC ASP.NET, Anda harus terlebih dahulu menambahkan referensi ke rakitan Microsoft.Web.Mvc.DataAnnotations.dll dan perakitan System.ComponentModel.DataAnnotations.dll. Pilih opsi menu Proyek, Tambahkan Referensi. Selanjutnya klik tab Telusuri dan telusuri ke lokasi tempat Anda mengunduh (dan membuka zip) sampel Binder Model Anotasi Data (lihat Gambar 1).

Gambar tab telusuri

Gambar 1: Menambahkan referensi ke model Anotasi Data Binder (Klik untuk melihat gambar ukuran penuh)

Pilih rakitan Microsoft.Web.Mvc.DataAnnotations.dll dan rakitan System.ComponentModel.DataAnnotations.dll dan klik tombol OK .

Anda tidak dapat menggunakan rakitan System.ComponentModel.DataAnnotations.dll yang disertakan dengan .NET Framework Paket Layanan 1 dengan Model Anotasi Data Binder. Anda harus menggunakan versi rakitan System.ComponentModel.DataAnnotations.dll yang disertakan dengan Model Anotasi Data Binder Unduhan sampel.

Terakhir, Anda perlu mendaftarkan Model DataAnnotations Binder dalam file Global.asax. Tambahkan baris kode berikut ke penanganan aktivitas Application_Start() sehingga metode Application_Start() terlihat seperti ini:

protected void Application_Start()
{
    RegisterRoutes(RouteTable.Routes);
    ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
}

Baris kode ini mendaftarkan ataAnnotationsModelBinder sebagai pengikat model default untuk seluruh aplikasi MVC ASP.NET.

Menggunakan Atribut Validator Anotasi Data

Saat Anda menggunakan Model Anotasi Data Binder, Anda menggunakan atribut validator untuk melakukan validasi. Namespace Layanan System.ComponentModel.DataAnnotations menyertakan atribut validator berikut:

  • Rentang – Memungkinkan Anda memvalidasi apakah nilai properti berada di antara rentang nilai yang ditentukan.
  • RegularExpression – Memungkinkan Anda memvalidasi apakah nilai properti cocok dengan pola ekspresi reguler tertentu.
  • Wajib – Memungkinkan Anda menandai properti sebagaimana diperlukan.
  • StringLength – Memungkinkan Anda menentukan panjang maksimum untuk properti string.
  • Validasi – Kelas dasar untuk semua atribut validator.

Catatan

Jika kebutuhan validasi Anda tidak dipenuhi oleh salah satu validator standar, Maka Anda selalu memiliki opsi untuk membuat atribut validator kustom dengan mewarisi atribut validator baru dari atribut Validasi dasar.

Kelas Produk di Daftar 1 menggambarkan cara menggunakan atribut validator ini. Properti Nama, Deskripsi, dan UnitPrice ditandai sebagaimana diperlukan. Properti Nama harus memiliki panjang string kurang dari 10 karakter. Terakhir, properti UnitPrice harus cocok dengan pola ekspresi reguler yang mewakili jumlah mata uang.

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

namespace MvcApplication1.Models
{
    
    public class Product
    {
        public int Id { get; set; }

        [Required]
        [StringLength(10)]
        public string Name { get; set; }

        [Required]
        public string Description { get; set; }

        [DisplayName("Price")]
        [RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
        public decimal UnitPrice { get; set; }
    }
}

Daftar 1: Models\Product.cs

Kelas Produk menggambarkan cara menggunakan satu atribut tambahan: atribut DisplayName. Atribut DisplayName memungkinkan Anda mengubah nama properti saat properti ditampilkan dalam pesan kesalahan. Alih-alih menampilkan pesan kesalahan "Bidang UnitPrice diperlukan" Anda dapat menampilkan pesan kesalahan "Bidang Harga diperlukan".

Catatan

Jika Anda ingin sepenuhnya menyesuaikan pesan kesalahan yang ditampilkan oleh validator maka Anda dapat menetapkan pesan kesalahan kustom ke properti ErrorMessage validator seperti ini: <Required(ErrorMessage:="This field needs a value!")>

Anda dapat menggunakan kelas Produk di Daftar 1 dengan tindakan Pengontrol Create() di Daftar 2. Tindakan pengontrol ini memutar ulang tampilan Buat saat status model berisi kesalahan apa pun.

using System.Web.Mvc;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class ProductController : Controller
    {
         //
        // GET: /Product/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Product/Create

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([Bind(Exclude="Id")]Product productToCreate)
        {
            if (!ModelState.IsValid)
                return View();

            // TODO: Add insert logic here
            return RedirectToAction("Index");
        }

    }
}

Daftar 2: Controllers\ProductController.vb

Terakhir, Anda dapat membuat tampilan di Daftar 3 dengan mengklik kanan tindakan Create() dan memilih opsi menu Tambahkan Tampilan. Buat tampilan yang ditik dengan kuat dengan kelas Produk sebagai kelas model. Pilih Buat dari daftar dropdown lihat konten (lihat Gambar 2).

Gambar kotak dialog tambahkan tampilan

Gambar 2: Menambahkan Tampilan Buat

<%@ Page Title="" Language="C#" MasterPageFile="Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Product>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

    <% using (Html.BeginForm()) {%>

        <fieldset>
            <legend>Fields</legend>
            <p>
                <label for="Name">Name:</label>
                <%= Html.TextBox("Name") %>
                <%= Html.ValidationMessage("Name", "*") %>
            </p>
            <p>
                <label for="Description">Description:</label>
                <%= Html.TextBox("Description") %>
                <%= Html.ValidationMessage("Description", "*") %>
            </p>
            <p>
                <label for="UnitPrice">Price:</label>
                <%= Html.TextBox("UnitPrice") %>
                <%= Html.ValidationMessage("UnitPrice", "*") %>
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%=Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

Daftar 3: Views\Product\Create.aspx

Catatan

Hapus bidang Id dari formulir Buat yang dihasilkan oleh opsi menu Tambahkan Tampilan . Karena bidang Id sesuai dengan kolom Identitas, Anda tidak ingin mengizinkan pengguna memasukkan nilai untuk bidang ini.

Jika Anda mengirimkan formulir untuk membuat Produk dan Anda tidak memasukkan nilai untuk bidang yang diperlukan, maka pesan kesalahan validasi di Gambar 3 ditampilkan.

Gambar semua kesalahan validasi

Gambar 3: Bidang yang diperlukan tidak ada

Jika Anda memasukkan jumlah mata uang yang tidak valid, maka pesan kesalahan di Gambar 4 ditampilkan.

Gambar kesalahan validasi mata uang yang tidak valid

Gambar 4: Jumlah mata uang tidak valid

Menggunakan Validator Anotasi Data dengan Kerangka Kerja Entitas

Jika Anda menggunakan Microsoft Entity Framework untuk menghasilkan kelas model data, Anda tidak dapat menerapkan atribut validator langsung ke kelas Anda. Karena Entity Framework Designer menghasilkan kelas model, setiap perubahan yang Anda buat pada kelas model akan ditimpa saat berikutnya Anda membuat perubahan dalam Designer.

Jika Anda ingin menggunakan validator dengan kelas yang dihasilkan oleh Kerangka Kerja Entitas, Anda perlu membuat kelas data meta. Anda menerapkan validator ke kelas data meta alih-alih menerapkan validator ke kelas aktual.

Misalnya, bayangkan Anda telah membuat kelas Film menggunakan Kerangka Kerja Entitas (lihat Gambar 5). Bayangkan, selanjutnya, bahwa Anda ingin membuat properti Judul Film dan Direktori diperlukan properti. Dalam hal ini, Anda dapat membuat kelas parsial dan kelas data meta di Daftar 4.

Gambar kelas film

Gambar 5: Kelas film yang dihasilkan oleh Entity Framework

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

namespace MvcApplication1.Models
{
    [MetadataType(typeof(MovieMetaData))]
    public partial class Movie
    {
    }

    public class MovieMetaData
    {
        [Required]
        public object Title { get; set; }

        [Required]
        [StringLength(5)]
        public object Director { get; set; }

        [DisplayName("Date Released")]
        [Required]
        public object DateReleased { get; set; }
    }

}

Daftar 4: Models\Movie.cs

File dalam Daftar 4 berisi dua kelas bernama Movie dan MovieMetaData. Kelas Film adalah kelas parsial. Ini sesuai dengan kelas parsial yang dihasilkan oleh Kerangka Kerja Entitas yang terkandung dalam DataModel. Designer.vb.

Saat ini, .NET framework tidak mendukung properti parsial. Oleh karena itu, tidak ada cara untuk menerapkan atribut validator ke properti kelas Film yang ditentukan dalam DataModel. Designer.vb dengan menerapkan atribut validator ke properti kelas Film yang ditentukan dalam file di Listing 4.

Perhatikan bahwa kelas Film parsial dihiasi dengan atribut MetadataType yang menunjuk di kelas MovieMetaData. Kelas MovieMetaData berisi properti proksi untuk properti kelas Film.

Atribut validator diterapkan ke properti kelas MovieMetaData. Properti Judul, Direktur, dan DateReleased semuanya ditandai sebagai properti yang diperlukan. Properti Direktur harus diberi string yang berisi kurang dari 5 karakter. Terakhir, atribut DisplayName diterapkan ke properti DateReleased untuk menampilkan pesan kesalahan seperti "Bidang Tanggal Dirilis diperlukan." alih-alih kesalahan "Bidang DateReleased diperlukan."

Catatan

Perhatikan bahwa properti proksi di kelas MovieMetaData tidak perlu mewakili jenis yang sama dengan properti yang sesuai di kelas Film. Misalnya, properti Direktur adalah properti string di kelas Film dan properti objek di kelas MovieMetaData.

Halaman di Gambar 6 mengilustrasikan pesan kesalahan yang dikembalikan saat Anda memasukkan nilai yang tidak valid untuk properti Film.

Gambar pesan kesalahan untuk nilai film yang tidak valid

Gambar 6: Menggunakan validator dengan Kerangka Kerja Entitas (Klik untuk melihat gambar ukuran penuh)

Ringkasan

Dalam tutorial ini, Anda mempelajari cara memanfaatkan Model Anotasi Data Binder untuk melakukan validasi dalam aplikasi MVC ASP.NET. Anda mempelajari cara menggunakan berbagai jenis atribut validator seperti atribut Required dan StringLength. Anda juga mempelajari cara menggunakan atribut ini saat bekerja dengan Microsoft Entity Framework.