创建自定义DataType验证

Cla*_*ari 6 c# validation asp.net-mvc

我想创建自己的验证类(我在JS中有很多验证方法,我想将其转换为C#以与MVC模型一起使用),其工作原理与数据注释完全相同,在客户端和服务器端[DataType(MyDataType)]进行验证:或者像验证一样DataAnnotation属性如下:[MyDataTypeValidation]

我不知道哪个选项更好,使我的验证"库"

在示例中,我有我的类FigurasDA,我想对属性nombre进行自定义验证.

namespace MonitoreoIntegrado.Models
{
    [MetadataType(typeof(FigurasDA))]
    public partial class Figuras
{
}

public class FigurasDA
{
    [DataType(MyDataType)]
    //or
    [MyDataTypeValidation]
    public string nombre { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我想验证字符串是否与正则表达式匹配,@"^[\w\s\.\-_]+$"并显示如下所示的错误消息"Solo se permite letras,numeros y puntuaciones( - _.)"如果不这样做.(这是我的"Alfanumerico"数据类型).

你能举个例子说明我的验证类和里面写的代码吗?

Dmy*_*tro 6

实际上它很容易......您只需从ValidationAttribute类继承自定义验证属性并提供自己的IsValid逻辑.例如:

public class MyDataTypeValidationAttribute : ValidationAttribute
{
    private Regex _regex = new Regex(@"^[\w\s.-_]+$");          

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {               
        if (_regex.IsMatch(value.ToString()))
        {
            return ValidationResult.Success;
        }

        return new ValidationResult("Solo se permite letras, numeros y puntuaciones(- _ .)" );
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的视图模型中,您可以使用:

public class FigurasDA
{    
    [MyDataTypeValidation]
    public string nombre { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

您可以保存此验证属性,例如在AttributesMVC项目的文件夹中:

步骤1

第2步

第3步