我正在使用下面的类和默认的脚手架视图,但我无法在客户端验证电子邮件。我还尝试了另一个电子邮件正则表达式,但这也无效。我在这里缺少什么?
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}$")
{
}
}
答案 0 :(得分: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,因此客户端验证也可以正常工作。
当然,如果此示例中使用的正则表达式不适合您,请不要犹豫,改进它。