Asp.net
如何創建自定義數據註釋驗證器
想要創建自定義數據註釋驗證。有沒有關於如何創建它們的有用指南/範例?
首先:
具有最小和最大長度的 StringLength。我知道 .NET 4 可以做到這一點,但想在 .NET 3.5 中做同樣的事情,如果可能的話,只能定義最小長度(至少 x 個字元)、最大長度(最多 x 個字元),或者兩者兼而有之(在 x 和 y 字元之間)。
其次:
使用模數算法進行驗證 - 如果數字是有效長度,我希望使用 Modulus 11 算法進行驗證(我已經在 JavaScript 中實現了它,所以我想這只是一個簡單的移植?)
更新:
解決了第二個問題,只是複制 JavaScript 實現並進行一些調整的情況,所以不需要解決方案。
要創建自定義數據註釋驗證器,請遵循以下準則:
- 你的類必須繼承自
System.ComponentModel.DataAnnotations.ValidationAttribute類。- 覆蓋
bool IsValid(object value)方法並在其中實現驗證邏輯。而已。
重要注意事項
有時開發人員會檢查該值是否為空/空並返回 false。這通常是不正確的行為,因為這是在
Required驗證器上檢查,這意味著您的自定義驗證器應該只驗證非空數據,true否則返回(參見範例)。這將使它們可用於必填(必填)和非必填欄位。例子
public class StringLengthRangeAttribute : ValidationAttribute { public int Minimum { get; set; } public int Maximum { get; set; } public StringLengthRangeAttribute() { this.Minimum = 0; this.Maximum = int.MaxValue; } public override bool IsValid(object value) { string strValue = value as string; if (!string.IsNullOrEmpty(strValue)) { int len = strValue.Length; return len >= this.Minimum && len <= this.Maximum; } return true; } }所有屬性都可以根據您的需要在屬性中設置。
一些例子:
[Required] [StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")] [StringLengthRange(Maximum = 20)] [Required] [StringLengthRange(Minimum = 10, Maximum = 20)]當一個特定的屬性沒有被設置時,它的值是在建構子中設置的,所以它總是有一個值。在上面的使用範例中,我還特意添加了驗證器,因此它與我寫
Required的上述警告一致。重要的
所以這個驗證器仍然可以處理你不需要的模型值,但是當它存在時它會驗證(想想網路表單中的文本欄位,這不是必需的,但如果使用者輸入一個值,它必須是有效的) .