Asp.net mvc 自定义验证属性在客户端不起作用,仅在服务器上起作用

Asp.net mvc 自定义验证属性在客户端不起作用,仅在服务器上起作用,asp.net-mvc,asp.net-mvc-2-validation,asp.net-mvc-3,custom-validators,Asp.net Mvc,Asp.net Mvc 2 Validation,Asp.net Mvc 3,Custom Validators,我正在尝试实现自定义属性验证,类似于ScottGu博客中演示的: 我有此电子邮件的自定义验证程序属性: public class EmailAttribute : RegularExpressionAttribute { public EmailAttribute() : base("^[A-Za-z0-9](([_\\.\\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\\.\\-]?[a-zA-Z0-9]+)

我正在尝试实现自定义属性验证,类似于ScottGu博客中演示的:

我有此电子邮件的自定义验证程序属性:

public class EmailAttribute : RegularExpressionAttribute
      {
      public EmailAttribute() :
                base("^[A-Za-z0-9](([_\\.\\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\\.\\-]?[a-zA-Z0-9]+)*)\\.([A-Za-z]{2,})$") { }
      }
我的班级是这样使用的:

    [Required(ErrorMessage = ValidationCiM.MsgObaveznoPolje)]
    [Email(ErrorMessage = ValidationCiM.MsgMailNeispravan)]
    [StringLength(ValidationCiM.LenSrednjePolje, ErrorMessage = ValidationCiM.MsgSrednjePolje)]
    public string Mail { get; set; }
在服务器端运行良好,模型经过验证,一切正常。但是客户端验证不会为此激活第二个属性,它适用于Required,也适用于StringLength,但不适用于电子邮件。 我尝试过包括jquery和MicrosoftAjax脚本,但似乎没有什么区别

在ScottGu的博客中,他指出,如果像这样实现自定义验证,则无需添加自定义脚本即可工作


有什么想法吗?

在ASP.NET MVC 3中使用IClientValidable:

 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 System.Collections.Generic.IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
      var rule = new ModelClientValidationRegexRule(this.ErrorMessageString, base.Pattern);
      return new[] { rule };
    }
  }
公共类EmailAttribute:RegularExpressionAttribute,IClientValidable
{
公共属性()
: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 System.Collections.Generic.IEnumerable GetClientValidationRules(ModelMetadata元数据,ControllerContext上下文)
{
var rule=new ModelClientValidationRegexRule(this.ErrorMessageString,base.Pattern);
返回新的[]{rule};
}
}

您实际需要做的是(在应用程序启动时):


它将客户端验证连接到您的自定义属性。

谢谢,这已经奏效了。我假设对于任何自定义规则,只需要实现具有足够规则类型的IClientValidable接口,就可以将其添加到规则集合中jQuery可以对其执行客户端验证。
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAttribute), typeof(RegularExpressionAttributeAdapter));