2014-11-12 3 views
0

ASP.NET MVC 4에서 클라이언트 측 유효성 검사를 구현하고 싶습니다. IClientValidatable 인터페이스를 구현하고 어댑터 및 클라이언트 유효성 검사 코드를 추가 한 후에도 유효성 검사가 여전히 작동하지 않습니다. 사용자 정의 유효성 검사 속성 :MVC 눈에 거슬리지 않는 클라이언트 측 유효성 검사 실행 안 함

namespace MvcApplication1.Models 
{ 
[AttributeUsage(AttributeTargets.Property)] 
public class DateLessThanCurrentAttribute:ValidationAttribute,IClientValidatable 
{ 
public DateLessThanCurrentAttribute(string errorMessage) 
    :base(errorMessage) 
{ } 

protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
{ 
    ValidationResult validationResult = ValidationResult.Success; 

    if((DateTime)value>=DateTime.Now) 
    { 
    validationResult = new ValidationResult(FormatErrorMessage(base.ErrorMessage)); 
    } 

    return validationResult; 
} 

#region IClientValidatable Implementation 
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,  ControllerContext context) 
{ 
    string errorMessage = base.ErrorMessage; 

    ModelClientValidationRule dateLessthanCurrentValidationRule = new ModelClientValidationRule(); 
    dateLessthanCurrentValidationRule.ErrorMessage = FormatErrorMessage(errorMessage); 
    dateLessthanCurrentValidationRule.ValidationType = "datelessthancurrent"; 

    yield return dateLessthanCurrentValidationRule; 
} 
#endregion 
} 
} 

면도기보기 :

<div class="editor-label"> 
     @Html.LabelFor(model => model.DateOfBirth) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.DateOfBirth) 
     @Html.ValidationMessageFor(model => model.DateOfBirth) 
    </div> 

    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 
<script src="~/Scripts/Custom/CustomValidation.js"></script> 
} 

어댑터 및 검사기 : 아래의 코드를 참조하십시오

/// <reference path="jquery.validate.js"/> 
/// <reference path="jquery.validate.unobtrusive.js"/> 

$.validator.unobtrusive.adapters.addBool("datelessthancurrent"); 

$.validator.addMethod("datelessthancurrent", function (value, element,params) { 

alert('hey you!!!'); 
return false; 
}); 

답변

0

아, 내가 문제를 발견했다. 아래의 중복 라인이 원인이었습니다. 이 줄을 제거하면 문제가 해결됩니다.

<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>