[C#] 使用Enterprise Library Validation Block對表單進行驗證 (2) - 客製化錯誤訊息
前言
在前一篇文章中,我們提到了如何對Model進行驗證,
並顯示驗證的結果,讓使用者知道哪些欄位的輸入不符合規定。
但更進一步的,我們希望所顯示的錯誤訊息是更淺顯易懂的,
所以我們就必須使用Enterprise Library所提供的自定義訊息,
來客製化我們希望顯示的錯誤訊息。
實際演練
1.使用MessageTemplate
在Enterprise Library中,每個Validator Class都有一個屬性叫做Message Template,
我們只要在Message Template中輸入我們希望自定義的訊息,
當驗證Model不符合規定時,從ValidateResult所取得的訊息就會是自定義的了!
Model:
[RegexValidator(@"([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})", MessageTemplate = "這不是一個有效的Email格式")]
public string Email
{
get { return _Email; }
set { _Email = value; }
}
[RegexValidator(@"^[A-Za-z]{1}\d{9}$", MessageTemplate = "這不是一個有效的身分證字號格式")]
public string Id
{
get { return _Id; }
set { _Id = value; }
}
[StringLengthValidator(1, 200, MessageTemplate = "長度必須介於1~200之間")]
public string Introduce
{
get { return _Introduce; }
set { _Introduce = value; }
}
[StringLengthValidator(1, 30, MessageTemplate = "長度必須介於1~30之間")]
public string Name
{
get { return _Name; }
set { _Name = value; }
}
[RegexValidator(@"^\d{2,4}-\d{6,8}$", MessageTemplate = "電話格式 ##-######## ")]
public string Phone
{
get { return _Phone; }
set { _Phone = value; }
}
驗證結果:
2.使用MessageTemplateResource
除此之外,我們也可以把自定義的錯誤訊息定義在Resource檔中,
只要在指定Resource的Tyoe,以及所要對應的Key name就可以了,
首先我們在專案點選滑鼠右鍵,選擇Properties,結果如下:
- 點選Resource頁籤,新增Resource。
- 輸入自定義之錯誤訊息
- 將Access Modifier更改為Public
並更改Validator的屬性如下:
[RegexValidator(@"([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})", MessageTemplateResourceName = "EmailFormatError", MessageTemplateResourceType = typeof(Resources))]
public string Email
{
get { return _Email; }
set { _Email = value; }
}
[RegexValidator(@"^[A-Za-z]{1}\d{9}$", MessageTemplateResourceName = "IdFormatError", MessageTemplateResourceType = typeof(Resources))]
public string Id
{
get { return _Id; }
set { _Id = value; }
}
[StringLengthValidator(1, 200, MessageTemplateResourceName = "LengthError", MessageTemplateResourceType = typeof(Resources))]
public string Introduce
{
get { return _Introduce; }
set { _Introduce = value; }
}
[StringLengthValidator(1, 30, MessageTemplateResourceName = "LengthError", MessageTemplateResourceType = typeof(Resources))]
public string Name
{
get { return _Name; }
set { _Name = value; }
}
[RegexValidator(@"^\d{2,4}-\d{6,8}$", MessageTemplateResourceName = "PhoneFormatError", MessageTemplateResourceType = typeof(Resources))]
public string Phone
{
get { return _Phone; }
set { _Phone = value; }
}
就可以達到同樣的效果囉!
結語
透過自定義訊息,可以讓客戶端顯示的錯誤提示更加淺顯易懂,
使用者也可更容易判斷自己所輸入的資料錯在哪邊?
並且藉由在Resource定義錯誤訊息,還可達到globalization的效果!