如何创build自定义数据注释validation器
想要创build自定义数据注释validation。 是否有任何有用的指导/样本如何创build它们?
首先:
具有最小和最大长度的StringLength。 我知道.NET 4可以做到这一点,但要在.NET 3.5中做同样的事情,如果可能的话,只能定义最小长度(至lessx个字符),最大长度(最多x个字符)或两者(在x和y之间)。
其次:
使用模数algorithmvalidation – 如果数字是有效长度,我希望使用Modulus 11algorithm进行validation(我已经在JavaScript中实现了它,所以我想这只是一个简单的移植?)
更新:
解决了第二个问题,只是复制JavaScript实现并做了一些调整,所以不需要解决scheme。
要创build自定义数据注释validation器,请按照以下指示进行操作:
- 你的类必须从
System.ComponentModel.DataAnnotations.ValidationAttribute
类inheritance。 - 重写
bool IsValid(object value)
方法并在其中实现validation逻辑。
而已。
重要注意
有时开发人员检查该值不为空/空并返回false。 这通常是不正确的行为,因为这是Required
validation器来检查哪些手段您的自定义validation器应该只validation非空数据,否则返回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
validation器,因此它与我所写的上述警告同步。
重要
所以这个validation器仍然可以处理你不需要的模型值,但是当它存在时它会validation(想象一下web表单中的文本字段,这不是必需的,但是如果用户input一个值,它必须是有效的) 。
将CustomValidationAttribute
与具有签名的validation函数一起使用
public static ValidationResult Validate(MyType x, ValidationContext context)
示例(对于string属性)
using System.ComponentModel.DataAnnotations; public class MyClass { [CustomValidation(typeof(MyClass), "Validate")] public string MyProperty { get; set; } public static ValidationResult Validate(string x, ValidationContext context) { return (x == "valid") ? new ValidationResult(null) : ValidationResult.Success; } }
- ASP.Net中的远程validationMVC 3:如何在Action Method中使用AdditionalFields
- entity framework代码第一个唯一列
- DataAnnotation为必需属性
- 从数据注释的Asp.Net Mvc隐藏字段
- 用数据注释分配DateTime格式?
- DataAnnotationsvalidation(正则expression式)在asp.net mvc 4 – 剃刀视图
- 使用WPF和entity framework的DataAnnotationsvalidation数据?
- 如何在ASP.MVC中指定多行编辑器的列和行?
- 用于DataAnnotationvalidation属性的Int或Number DataType