我正在使用下面的类和默认的脚手架 View ,但我无法在客户端验证电子邮件。我还尝试了另一个电子邮件正则表达式,但也没有用。我在这里缺少什么?
public class Person
{
[Email(ErrorMessage="...........")]
public string Name { get; set; }
}
public class EmailAttribute : RegularExpressionAttribute
{
public EmailAttribute()
: base(@"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$")
{
}
}
请您参考如下方法:
您可能会找到 following blog post有用。摘自:
public class EmailAttribute : RegularExpressionAttribute, IClientValidatable
{
public EmailAttribute()
: base(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
@"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
@".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$")
{
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var errorMessage = FormatErrorMessage(metadata.GetDisplayName());
yield return new EmailValidationRule(errorMessage);
}
}
public class EmailValidationRule : ModelClientValidationRule
{
public EmailValidationRule(string errorMessage)
{
ErrorMessage = errorMessage;
ValidationType = "email";
}
}
以及用法:
public class Person
{
[Required(ErrorMessage = "{0} is required.")]
[Email(ErrorMessage = "{0} appears to be invalid.")]
public string Name { get; set; }
}
这就是全部。因为此自定义属性实现了 IClientValidatable客户端验证也将起作用。
当然,如果本示例中使用的正则表达式不适合您,请毫不犹豫地对其进行改进。
