我目前在视图模型中的字符串属性上使用EmailAddressAttribute验证类。我遇到的问题是,在客户端,jQuery验证允许使用以下格式的电子邮件,“someDude @ test”,但是当提交视图模型时,ModelState失败,因为EmailAddressAttribute不接受该格式的地址。
我能想到的唯一解决方法是在服务器端应用正则表达式或创建自定义jQuery验证规则。
对此有更清洁的解决方法吗?
答案 0 :(得分:0)
所以我最终获取了jwats1980建议并创建了一个与jQuery验证一致的新自定义验证属性。以下是我的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Net.Mail;
using System.Web.Mvc;
namespace SWCGPExternal.Attributes
{
public class CustomEmailAddressAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value == null)
return false;
try
{
MailAddress m = new MailAddress((string)value);
return true;
}
catch (FormatException)
{
return false;
}
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var clientValidationRule = new ModelClientValidationRule()
{
ErrorMessage = this.ErrorMessage,
ValidationType = "email"
};
return new[] { clientValidationRule };
}
}
}