繁体   English   中英

重用MVC5中的验证属性

[英]Reusing Validation Attributes in MVC5

我一直在进行有关验证及其工作方式的大量研究。 我知道我们可以使用属性,甚至可以创建自定义属性,然后可以将其放到ViewModel上以验证该数据。 尽管一切正常,但我发现自己正在多个ViewModel上重复使用相同的属性组合。

例如,让我们以一个“名称”作为名称,在项目X中使用一个名称,无论它是电影名称,书名,人名,姓氏等等。。。毕竟这是一个名称,因此我倾向于使用90%的验证属性相同。 图片,必填,最小长度3,最大长度50,仅字母,空格等。

现在,我得到一个变量,该变量具有5个以上的属性。 这些是预先构建的属性,由于它们已经为我编码,因此我不希望再次编码。 所以我的问题是这样的:

我该如何创建CustomValidateName属性,以对所有这些内容进行验证,并根据错误内容提供不同的错误消息,同时又重用.NET框架中的某些内置属性,因此我不会发明轮子。 最重要的是,只要我有一个Name变量,我现在就可以放一个属性,而不是普通的5+。

使用可以为所有验证创建自定义验证

例如 :

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.ComponentModel.DataAnnotations;  
using System.Text.RegularExpressions;  

namespace Custom_DataAnnotation_Attribute.Models  
{  
    public class CustomEmailValidator : ValidationAttribute  
    {  
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)  
        {  
            if (value != null)  
            {  
                string email = value.ToString();  

                if (Regex.IsMatch(email, @"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", RegexOptions.IgnoreCase))  
                {  
                    return ValidationResult.Success;  
                }  
                else  
                {  
                    return new ValidationResult("Please Enter a Valid Email.");  
                }  
            }  
            else  
            {  
                return new ValidationResult("" + validationContext.DisplayName + " is required");  
            }  
        }  

上面的方法为两种必需的nd电子邮件类型生成验证

您可以在此方法中使用If If Else或Switch来添加更多验证,并还原自定义消息

型号:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.ComponentModel.DataAnnotations;  

namespace Custom_DataAnnotation_Attribute.Models  
{  
    public class EmployeeModel  
    {  
        public string Name { get; set; }  

        [CustomEmailValidator]  
        public string Email { get; set; }  
        public string Password { get; set; }  
        public string Mobile { get; set; }          
    }  
}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM