ASP.NET - MVC - Chú thích dữ liệu
Chú thích dữ liệu (Data Annotation)
Data Annotation
Trong .NET Framework, Data Annotation dùng để thêm phần ý nghĩa mở rộng vào dữ liệu thông qua các thẻ thuộc tính. Tính năng Data Annotation được Microsoft giới thiệu lần đầu ở .NET 3.5 tại namespace System.ComponentModel.DataAnnotations. Namespace này chứa các lớp dùng để định nghĩa thuộc tính mở rộng cho dữ liệu.
Các thuộc tính Data Annotation được phân chia thành 3 thể loại chính:
- Thuộc tính xác nhận (Validation Attribute): dùng để thêm các tập luật xác nhận cho dữ liệu.
- Thuộc tính hiển thị (Display Attribute): dùng để đặc tả cách dữ liệu từ một lớp được hiển thị ở giao diện.
- Thuộc tính mô hình (Modelling Attribute): dùng để đặc tả mục đích sử dụng của lớp thành viên và mối quan hệ giữa các lớp.
Thêm thư viện DataAnnotations
Trở lại dự án, trước hết bạn mở tập tin BookStoreModel.edmx để thấy rõ mô hình như sau:
Trong đó, bảng Book có định dạng dữ liệu như sau:
- BooktID: kiểu int, khóa chính, tự tăng (bắt buộc phải có dữ liệu)
- Title: Tên sách của bảng Book, bắt buộc nhập, kiểu dữ liệu NVARCHAR tối đa 200 ký tự
- AuthorID: ID của bảng Author, bắt buộc nhập, kiểu dữ liệu int, khóa ngoại (bắt buộc phải có dữ liệu)
- Price: Giá tiền sách của bảng Book, kiểu dữ liệu decimal(18, 0)
- Images: Đường dẫn hình ảnh, kiểu dữ liệu NVARCHAR, tối đa 200 ký tự
- CategoryID: ID của bảng Category, bắt buộc nhập, kiểu dữ liệu int, khóa ngoại (bắt buộc phải có dữ liệu)
- Decription: Mô tả sách trong bảng Book, kiểu dữ liệu ntext
- Published: Ngày tháng, kiểu DateTime
- ViewCount: Số lần xem trong bảng Book, kiểu dữ liệu int
Tiếp theo, bạn mở tập tin Models/Book.cs (BookStoreModel.edmx/Book.cs) và thấy nội dung như sau:
namespace BookStoreManager.Models
{
using System;
using System.Collections.Generic;
public partial class Book
{
public int BookID { get; set; }
public string Title { get; set; }
public int AuthorID { get; set; }
public Nullable<decimal> Price { get; set; }
public string Images { get; set; }
public int CategoryID { get; set; }
public string Description { get; set; }
public Nullable<System.DateTime> Published { get; set; }
public Nullable<int> ViewCount { get; set; }
public virtual Author Author { get; set; }
public virtual Category Category { get; set; }
}
}
Đến đấy chúng ta tiến hành thêm các chú thích dữ liệu cho các thuộc tính trong lớp Book.cs. Trước hết thêm dòng using System.ComponentModel.DataAnnotations; và dòng using System.ComponentModel; để nhúng namespace DataAnnotations vào lớp Book.
Định nghĩa thuộc tính xác nhận dữ liệu
Bạn có thể định nghĩa kiểu dữ liệu cho thuộc tính với các loại chú thích sau:
Thuộc tính | Giải thích |
---|---|
Required | Chỉ định thuộc tính phải có dữ liệu nhập vào trước khi submit về server. |
StringLength | Định nghĩa chiều dài thuộc tính, cho phép đặc tả cả chiều dài tối thiểu và tối đa. |
Range | Định nghĩa giá trị số tối thiểu và tối đa của một thuộc tính. |
RegularExpression | Là biểu thức chính quy được dùng để xử lý chuỗi nâng cao thông qua biểu thức riêng của nó |
CreditCard | Định nghĩa số thẻ tính dụng (credit card) |
CustomValidation | Cho phép người dùng tự viết hàm xử lý kiểm tra lỗi |
EmailAddress | Kiểm tra email người dùng nhập vào có hợp lệ? |
FileExtension | Kiểm tra phần mở rộng của một tập tin |
MaxLength | Kích thước tối đa của trường dữ liệu nhập vào |
MinLength | Kích thước tối thiểu của trường dữ liệu nhập vào |
Phone | Kiểm tra số phone có hợp lệ? |
DisplayName | Thuộc tính hiển thị |
Định nghĩa thuộc tính hiển thị (Display attribute)
Để định nghĩa thuộc tính hiển thị, đơn giản bạn chỉ cần thêm dòng [DisplayName(“tên cần hiển thị”)] vào trước các thuộc tính cần hiển thị.
Trong tập tin Book.cs chúng ta cần định nghĩa các thuộc tính:
namespace BookStoreManager.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
public partial class Book
{
public int BookID { get; set; }
[Required(ErrorMessage = "Xin vui lòng nhập sách"), MaxLength(100,
ErrorMessage = "Tên sách không dài hơn 100 ký tự"), DisplayName("Tên sách")]
public string Title { get; set; }
[Required(ErrorMessage = "Xin vui lòng chọn tác giả"), DisplayName("Tác giả")]
public int AuthorID { get; set; }
[DisplayName("Đơn giá")]
public Nullable<decimal> Price { get; set; }
[DisplayName("Hình ảnh")]
public string Images { get; set; }
[Required(ErrorMessage = "Xin vui lòng chọn chủ đề sách"), DisplayName("Chủ đề sách")]
public int CategoryID { get; set; }
[DisplayName("Mô tả")]
public string Description { get; set; }
[DisplayName("Ngày xuất bản"), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> Published { get; set; }
[DisplayName("Số lần xem")]
public Nullable<int> ViewCount { get; set; }
public virtual Author Author { get; set; }
public virtual Category Category { get; set; }
}
}
Trong tập tin Author.cs chúng ta cần định nghĩa các thuộc tính:
[DisplayName("Tác giả")]
public string AuthorName { get; set; }
Trong tập tin Category.cs chúng ta cần định nghĩa các thuộc tính:
[DisplayName("Chủ đề")]
public string CategoryName { get; set; }
Tại sao chúng ta chỉ định nghĩa vài thuộc tính trong 2 tập tin Category.cs, Author.cs? Bởi vì, chúng ta chỉ làm demo CURD cho bảng Book.
Chú thích dữ liệu (Data Annotation) trong Entity Framework giúp bạn định nghĩa dữ liệu thuộc tính trực tiếp trong mã nguồn được gieo từ các bảng cơ sở dữ liệu và giúp bạn kiểm soát được dữ liệu nhập vào từ người dùng tốt nhất cũng như cách định nghĩa dữ liệu hiển thị trên giao diện. Trong bài tiế theo chúng ta tạo CURD dựa vào chú thích dữ liệu để kiểm tra ràng buộc và hiển thị cộ dữ liệu.