[C#] 使用Enterprise Library Validation Block對表單進行驗證 (2) - 客製化錯誤訊息

  • 8623
  • 0

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

驗證結果:

13

2.使用MessageTemplateResource

除此之外,我們也可以把自定義的錯誤訊息定義在Resource檔中,

只要在指定Resource的Tyoe,以及所要對應的Key name就可以了,

首先我們在專案點選滑鼠右鍵,選擇Properties,結果如下:

14

  • 點選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的效果!