Asp.net mvc 3 低调的AJAX不会验证“Not Required”字段的自定义属性

Asp.net mvc 3 低调的AJAX不会验证“Not Required”字段的自定义属性,asp.net-mvc-3,Asp.net Mvc 3,我试图在MVC3中通过不引人注目的AJAX表单实现客户端验证 public class PhoneNumberAttribute : RegularExpressionAttribute, IClientValidatable { private const string Message = " must be a valid phone number"; public PhoneNumberAttribute() : base(@"^[\s\d\+\(\

我试图在MVC3中通过不引人注目的AJAX表单实现客户端验证

    public class PhoneNumberAttribute : RegularExpressionAttribute, IClientValidatable
{
    private const string Message = " must be a valid phone number";
    public PhoneNumberAttribute()
        : base(@"^[\s\d\+\(\)]+$")
    {
        ErrorMessage = "{0}" + Message;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        return new List<ModelClientValidationRule>() {
            new ModelClientValidationRule{
                ValidationType="phonenumber",
                  ErrorMessage= metadata.DisplayName + " " + Message
            } 
        };
    }
}
HTML

我已经为具有[required]属性和自定义验证属性的字段包含了required.js文件和其他客户端验证工作

请说明为什么它不适用于PhoneNumber字段


谢谢,

C代码只是验证的一个方面。您所做的一切都是定义元数据来对其执行验证。您还需要使用不引人注目的JavaScript注册验证,在JavaScript中,请参阅

编辑 看了之后,我想知道你是不是想得太多了。我不明白为什么您需要IClientValidable,因为您所做的一切都是从RegularExpressionAttribute继承的,请尝试以下方法:

public class PhoneNumberAttribute : RegularExpressionAttribute
{
    private const string Message = " must be a valid phone number";
    public PhoneNumberAttribute()
        : base(@"^[\s\d\+\(\)]+$")
    {
        ErrorMessage = "{0}" + Message;
    }


}

谢谢你的回复,利亚姆。我想用不引人注目的JavaScript为这个自定义验证属性注册验证,但我没有。这是因为,我的模型字段有更多的自定义属性,它可以在不使用javascript注册的情况下工作。我刚刚读到,在MVC3中,我们可以通过实现IClientValidable来注册客户端验证。如果我错了,请改正。谢谢,您仍然需要在JavaScript中注册它。IClientValidable只定义了一种更简单的方法来定义您的验证属性,因为它过去实现验证规则非常繁琐
 <% using (Ajax.BeginForm("Contact", new AjaxOptions() { UpdateTargetId = "ajaxcontactform", 
     OnBegin = "ShowProcessing", 
     OnComplete = "HideProessing",
     InsertionMode = InsertionMode.Replace
 }))
 {%>
           <%: Html.ValidationSummary()%>

 <%: Html.TextBoxFor(m => m.PhoneNumber, new { Class = "contacttextform" })%>
 <input id="sendBtn" name="send" type="submit" class="contactformbutton" value="Send" />
<%}%>
public class PhoneNumberAttribute : RegularExpressionAttribute
{
    private const string Message = " must be a valid phone number";
    public PhoneNumberAttribute()
        : base(@"^[\s\d\+\(\)]+$")
    {
        ErrorMessage = "{0}" + Message;
    }


}