[asp.net mvc] Error Message – chung mà riêng

Bạn có đang dùng Entity Framework với ASP.NET MVC, cùng với đó là client-validation?

Đối với mỗi “`DataAnnotation“ attribute, bạn lại có 1 câu thông báo lỗi khác nhau, và bạn nhét tất cả chúng vào Resource?

Có một số cách giúp bạn khắc phục một vài nhược điểm trên 😉

1. Generic Customized Error Message

Generic tức là chung chung. Dùng chung 1 câu thông báo cho nhiều property cùng loại, chỉ thay đổi các yếu tố cần thiết

Ví dụ:
 * Tên phải chứa ít hơn 15 ký tự
 * Địa chỉ phải chứa ít hơn 150 ký tự

Trong ví dụ trên, phần tên, địa chỉ, 15, 150 là những tham số ta phải thay đổi cho câu thông báo. Vậy làm bằng cách nào?

Mò vào source code của từng loại DataAnnotation, chúng ta sẽ thấy 1 số điều thú vị

Source code cho DataAnnotation
https://github.com/Microsoft/referencesource/tree/master/System.ComponentModel.DataAnnotations/DataAnnotations

Tất cả các Attribute đều override lại method FormatErrorMessage. Mò vào từng implementation của các attribute, ta sẽ biết thứ tự các biến tham số của error message.

Attribute Source code Giải thích
StringLength return String.Format(CultureInfo.CurrentCulture, errorMessage, name, this.MaximumLength, this.MinimumLength); {0} = name, {1} = MaximumLength, {2} = MinimumLength
Compare return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, OtherPropertyDisplayName ?? OtherProperty); {0} = name, {1} = OtherPropertyDisplayName / OtherProperty
MinLength return string.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, Length); {0} = name, {1} = Length

Như vậy, thay vì ta phải viết thẳng từng câu error message, ta chỉ cần dùng string.Format với thứ tự chính xác của các tham số

Ví dụ với trường hợp StringLength

[StringLength(70, ErrorMessage = "{0} phải chứa ít hơn {1} ký tự")]
public string Name { get; set; }

2. Error Message Localization

Thực ra thì chiêu sau đây không những giúp bạn localize string của Error Message, mà bất kỳ đoạn string nào bạn muốn

Bạn phải tạo một file Resource trong project (.resx) để sử dụng

Thông tin thêm ở đây: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization

2.1. Nếu bạn có Resharper

Resharper là một sản phẩm hỗ trợ dev kha khá của JetBrains

Đặt con trỏ tại một string bất kỳ -> Resharper -> Refactor -> Move…

resharper move to resource

Resharper tính phí bản quyền

2.2. Nếu bạn muốn dùng hàng miễn phí

Visual Studio có một extension rất hay là RestXManager. Chức năng của nó thì tương tự như Resharper, thậm chí còn nhỉnh hơn một tí

  • Open source
  • Active Development
  • Hỗ trợ dịch text

Bạn có thể tìm và tải trực tiếp trong Visual Studio: Tools > Extensions and Updates > Online > search "ResXManager"

ResXManager

hoặc

tại link sau: https://marketplace.visualstudio.com/items?itemName=TomEnglert.ResXManager

Sau đó, tương tự như Resharper, đặt con trỏ tại một string bất kỳ > Chuột phải > Move to Resource

Move to Resource

Còn một số chiêu khác với những loại DataAnnotation khác nữa bạn nhé

Advertisements

One thought on “[asp.net mvc] Error Message – chung mà riêng

  1. Pingback: [ASPNET for Beginner] – Part 4 – CRUD và Data Validation | Tuan Tran's Blog

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s