客户端自定义电子邮件地址属性

本文关键字:属性 电子邮件地址 自定义 客户端 | 更新日期: 2023-09-27 18:13:42

晚上好!

我已经创建了下面的验证属性来检查电子邮件列表是否有效。

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)]
public class EmailAddressListAttribute : ValidationAttribute, IClientValidatable
{
    private const string RegexPattern = @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:'.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" +
                                        @"@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?'.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        ErrorMessage = $"{validationContext.DisplayName} contains invalid email addresses";
        var emailList = value.ToString().Split(';');
        return emailList.Where(e => !IsValidEmail(e))
            .ToList()
            .Count == 0 ? null : new ValidationResult(ErrorMessage);
    }
    private static bool IsValidEmail(string emailAddress)
    {
        return Regex.IsMatch(emailAddress, RegexPattern, RegexOptions.IgnoreCase);
    }
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationRule
        {
            ErrorMessage = ErrorMessage,
            ValidationType = "emailaddresslist"
        };
    }
}

我希望能够在客户端利用这一点,但我不确定我如何去做这件事。如有任何建议,不胜感激。

欢呼,Z

编辑

我已经添加了下面的JS代码作为一个文件,我渲染它在我的视图。它在页面加载时运行,但在提交表单时似乎没有做任何事情。

(function ($) {
$.validator.unobtrusive.adapters.addSingleVal("emailaddresslist");
$.validator.addMethod("emailaddresslist", function (value, element, params) {
    return false;
});
}(jQuery));

客户端自定义电子邮件地址属性

我搞定了!下面是属性

的代码
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class EmailAddressListAttribute : ValidationAttribute, IClientValidatable
{
    private const string DefaultErrorMessage = "{0} contains invalid email addresses.";
    private const string RegexPattern = @"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:'.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*" +
                                        @"@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?'.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?";
    public EmailAddressListAttribute()
      : base(DefaultErrorMessage)
    {
    }
    public override string FormatErrorMessage(string name)
    {
        return string.Format(ErrorMessageString, name);
    }
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        ErrorMessage = $"{validationContext.DisplayName} contains invalid email addresses";
        if (value.ToString().IsNullOrWhiteSpace()) return null;
        var emailList = value.ToString().Split(';');
        return emailList.Where(e => !IsValidEmail(e))
            .ToList()
            .Count == 0 ? null : new ValidationResult(ErrorMessage);
    }
    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var clientValidationRule = new ModelClientValidationRule()
        {
            ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
            ValidationType = "emailaddresslist"
        };
        clientValidationRule.ValidationParameters.Add("otherproperty", "");
        return new[] { clientValidationRule };
    }
    private static bool IsValidEmail(string emailAddress)
    {
        return Regex.IsMatch(emailAddress, RegexPattern, RegexOptions.IgnoreCase);
    }
}

这是客户端的jquery

(function ($) {
$.validator.addMethod("emailaddresslist", function (value, element, params) {
    if (!this.optional(element)) {
        if (value == "") return true;
        var re = /^(([^<>()[']''.,;:'s@'"]+('.[^<>()[']''.,;:'s@'"]+)*)|('".+'"))@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'])|(([a-zA-Z'-0-9]+'.)+[a-zA-Z]{2,}))$/;
        var emailAddressList = value.split(";")
        var arrayLength = emailAddressList.length;
        for (var i = 0; i < arrayLength; i++) {
            if (!re.test(emailAddressList[i].trim())) return false;
        }
    }
    return true;
});
$.validator.unobtrusive.adapters.addSingleVal("emailaddresslist", "otherproperty");
}(jQuery));