Asp.net 如何创建自定义数据批注验证器
希望创建自定义数据批注验证。是否有关于如何创建它们的有用指南/示例 首先:Asp.net 如何创建自定义数据批注验证器,asp.net,asp.net-mvc-2,data-annotations,Asp.net,Asp.net Mvc 2,Data Annotations,希望创建自定义数据批注验证。是否有关于如何创建它们的有用指南/示例 首先: 带最小和最大长度的StringLength。我知道.NET4可以做到这一点,但希望在.NET3.5中也能做到这一点,如果可能的话,可以定义最小长度(至少x个字符),最大长度(最多x个字符),或者两者都可以(在x和y个字符之间) 其次: 使用模运算进行验证-如果数字是有效长度,我希望使用模11算法进行验证(我已经在JavaScript中实现了它,所以我想这只是一个简单的移植?) 更新: 解决了第二个问题,就是复制JavaS
带最小和最大长度的StringLength。我知道.NET4可以做到这一点,但希望在.NET3.5中也能做到这一点,如果可能的话,可以定义最小长度(至少x个字符),最大长度(最多x个字符),或者两者都可以(在x和y个字符之间) 其次:
使用模运算进行验证-如果数字是有效长度,我希望使用模11算法进行验证(我已经在JavaScript中实现了它,所以我想这只是一个简单的移植?) 更新:
解决了第二个问题,就是复制JavaScript实现并进行一些调整,因此不需要解决这个问题。要创建自定义数据注释验证程序,请遵循以下Gudeline:
System.ComponentModel.DataAnnotations.ValidationAttribute
classboolisvalid(对象值)
方法并在其中实现验证逻辑Required
验证器上检查的,这意味着您的自定义验证器应该只验证非空数据,否则返回true
(参见示例)。这将使它们在必填(必选)和非必填字段上可用
例子
当一个特定的属性没有设置时,它的值在构造函数中设置,所以它总是有一个值。在上面的使用示例中,我特意添加了必需的
验证器,因此它与我编写的上面的小心保持同步
重要的
因此,此验证器仍将处理不需要的模型值,但当它存在时,它将进行验证(想想web表单中的文本字段,这不是必需的,但如果用户在中输入值,它必须是有效的)。将与带有签名的验证函数一起使用
public static ValidationResult Validate(MyType x, ValidationContext context)
示例(用于字符串属性)
那么,如果为空值,isValid是否应返回true?那么如何添加额外选项,例如
[MyValidator(Min=1,Max=20)]
,其中Min/Max(或仅一个)都是可选的?@onof:Yes。在这种情况下,它应该返回true
@Sam:我编辑了我的答案,并包含了一个示例,说明了您在第一个场景中的具体操作。@Rap它在MVC 5中对我有效。ValidationContext参数用于什么?@petryuno1如果您碰巧需要查看vlaidation中的其他属性,您可以使用它来获取模型。e、 例如,var模型=(MyClass)context.ObjectInstance;
[Required]
[StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")]
[StringLengthRange(Maximum = 20)]
[Required]
[StringLengthRange(Minimum = 10, Maximum = 20)]
public static ValidationResult Validate(MyType x, ValidationContext context)
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;
}
}