[MVC]Property頭上來自訂驗證吧
在ASP.NET MVC的Proprerty上有提供幾個我們常用的驗證Attribute如:
1: [Required]
2: public string CurrentName { get; set; }
不過我們大家都知道軟體絕對不會這麼單純,就只會用到這幾個常用的驗證,
隨著客戶難搞的程度,相關的驗證規則的複雜也會成正比攀升,內定的驗證是絕對
hold不住客戶,所以苦命的我們就要很命苦的自己寫驗證,下方的Code就是用來自訂一個驗證Attribute如:
要自訂驗證Attribute可選擇繼承RegularExpressionAttribute 或 ValidationAttribute,若是驗證的方式沒有太複雜的話,
可選用RegularExpressionAttribute 比較單純一點,下方的Code是RegularExpressionAttribute class
1: [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
2: public class RegularExpressionAttribute : ValidationAttribute
3: {
4: // 取得要用於驗證關聯之成員的規則運算式。pattern:正規表達式!正規表示式!隨便叫
5: public RegularExpressionAttribute(string pattern);
6:
7: public string Pattern { get; }
8:
9: //根據發生錯誤所在的資料欄位,將格式套用至錯誤訊息。
10: public override string FormatErrorMessage(string name);
11:
12: //判斷指定的物件是否有效。
13: public override bool IsValid(object value);
14: }
在看過它的成員之後就不難寫出一個自己想要的驗證方式如下:
1: using System.ComponentModel.DataAnnotations;
2: using Globalization;
3:
4: public class CustomRegularExpressionAttribute : RegularExpressionAttribute
5: {
6: // pattern正規表達示由外部定義,當然也可以寫死在這邊,讓這個class成為一個專門做某種驗證的Attribute
7: public CustomRegularExpressionAttribute(string pattern) : base(pattern)
8: {
9: }
10:
11: public override string FormatErrorMessage(string name)
12: {
13: return "驗證失敗";
14: }
15:
16: //判斷指定的物件是否有效。
17: public override bool IsValid(object value)
18: {
19: string valueAsString = value as string;
20: return (valueAsString != null);
21: }
22: }
23:
24: //這樣的話就便成一個專屬的驗證Email的Attribute
25: public class EmailRegularExpressionAttribute : RegularExpressionAttribute
26: {
27: public EmailRegularExpressionAttribute() : base(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")
28: {
29: }
30:
31: public override string FormatErrorMessage(string name)
32: {
33: return "Email格式不對";
34: }
35:
36: //判斷指定的物件是否有效。
37: public override bool IsValid(object value)
38: {
39: string valueAsString = value as string;
40: return (valueAsString != null);
41: }
42: }
最後就可以在Property上方便使用了
1: // patten跟EmailRegularExpression一樣,只是表示patten也可由這邊來決定
2: [CustomRegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*")]
3: public string CustomEmail { get; set; }
4:
5: [EmailRegularExpression]
6: public string Email { get; set; }
以上……………………