想要创建自定义数据注释验证。有关于如何创建它们的有用指南/示例吗?
首先:
StringLength 具有最小和最大长度。我知道 .NET 4 可以做到这一点,但希望在 .NET 3.5 中执行相同的操作,如果可能的话,能够仅定义最小长度(至少 x 个字符)、仅定义最大长度(最多 x 个字符)或两者(x 和 y 字符之间)。
其次:
使用模运算进行验证 - 如果数字是有效长度,我希望使用模 11 算法进行验证(我已经在 JavaScript 中实现了它,所以我想这只是一个简单的移植?)
更新:
解决了第二个问题,只是复制 JavaScript 实现并进行一些调整,因此不需要解决方案。
最佳答案
要创建自定义数据注释验证器,请遵循以下指南:
- 您的类必须继承自
System.ComponentModel.DataAnnotations.ValidationAttribute
类。 - 重写
bool IsValid(object value)
方法并在其中实现验证逻辑。
就是这样。
重要警告
有时开发人员会检查该值不为 null/空并返回 false。这通常是不正确的行为,因为这是必需
验证器检查的,这意味着您的自定义验证器应该只验证非空数据但返回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
验证器,因此它与我编写的上述警告同步。
重要
因此,此验证器仍将对不需要的模型值起作用,但是当它出现时,它会进行验证(想想网络表单中的文本字段,这不是必需的,但如果用户在其中输入值,则必须有效)。
关于asp.net - 如何创建自定义数据注释验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3413715/