2016-02-29 65 views
0

对于我的asp.net MVC View,我使用了验证注释和自定义验证器来验证我的字段。自定义验证码在离开焦点后不会立即触发

在我ViewModel

对于一个测试,我用

[StringLength(16, MinimumLength = 8, ErrorMessage = "This is a test to check if validation appears after leaving textbox")] 
[Display(Name = "Requestor First Name")] 
[Required] 
public string RequestorFirstName { get; set; } 

在视图中,当我输入只是一个字母,离开文本框的焦点,出现stringlength的错误消息。我知道 客户端验证正在工作。

对于我自定义的验证:

[FaceAmount] 
public decimal CurrentFaceAmount { get; set; } 

当我更改CurrentFaceAmount领域的金额,它不IMMEDIATELY火关闭自定义验证代码。只有 打提交按钮后,将破发点被击中下面的代码:

public class FaceAmount : ValidationAttribute, IClientValidatable 
{ 
    private string _dependentProperty; 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     if (value != null) 
     { 
      decimal val; 
      var isNumeric = decimal.TryParse(value.ToString(), out val); 

      if (isNumeric) 
      { 
       if (val > 0 && val < 100000) 
       { 
        return new ValidationResult("Minimum Coverage Amount is $1000.00"); 
       } 
      } 
     } 

     return ValidationResult.Success; 
    } 
} 

我怎么能离开火的文本框焦点后这个自定义的验证码?

回答

1

你有一个客户端验证器看起来像这样的Ode to Code礼貌补充:使用IClientValidatable

jQuery.validator.unobtrusive 
     .adapters.addSingleVal("greaterdate", "other"); 

jQuery.validator.addMethod("greaterdate", 
    function (val, element, other) { 
     var modelPrefix = element.name.substr(
          0, element.name.lastIndexOf(".") + 1) 
     var otherVal = $("[name=" + modelPrefix + other + "]").val(); 
     if (val && otherVal) { 
      if (Date.parse(val) <= Date.parse(otherVal)) { 
       return false; 
      } 
     } 
     return true; 
    } 
); 

,并链接到它:

public class DateGreaterThanAttribute : 
        ValidationAttribute, 
        IClientValidatable 
{ 

    public IEnumerable<ModelClientValidationRule> 
     GetClientValidationRules(ModelMetadata metadata, 
           ControllerContext context) 
    { 
     var rule = new ModelClientValidationRule(); 
     rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()); 
     rule.ValidationParameters.Add("other", OtherProperty); 
     rule.ValidationType = "greaterdate"; 
     yield return rule; 
    } 
相关问题