【发布时间】:2015-08-31 01:26:51
【问题描述】:
我编写了一个自定义 ValidationAttribute 来检查数据库中是否已经存在电子邮件。但是没有显示错误消息,并且在我提交表单后进行验证。 HTML 包含对 javascript 文件的引用以显示此消息,但仍然没有结果。尽管如此,其他属性都可以正常工作,并且会显示它们各自的消息。
public class NoDuplicateEmail : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var context = new MhotivoContext();
var email = validationContext.ObjectInstance.GetType().GetProperties(
).FirstOrDefault(prop => IsDefined(prop, typeof(NoDuplicateEmail)));
var emailValue = (string)email.GetValue(validationContext.ObjectInstance);
if(context.Users.FirstOrDefault(x => x.Email == emailValue)!=null)
return new ValidationResult("Email is in use!");
return ValidationResult.Success;
}
}
[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[Display(Name = "Email")]
[NoDuplicateEmail]
【问题讨论】:
-
不太清楚你想用
var email = ...线做什么?object value包含属性的值。 -
1 - 要在客户端验证,您必须创建一个自定义 JavaScript 函数。 2 - 您需要调用数据库才能验证表单,所以如果没有 ajax 调用就无法验证
-
@FabioLuz,您不需要自定义 javascript 函数。这都是 MVC 内置的(使用
[Remote]属性,该属性在内部结合jquery.validate.unobtrusive.js进行 ajax 调用) -
是的,但是远程进行了 ajax 调用。我的意思是,在不调用服务器的情况下进行验证
标签: javascript c# asp.net-mvc