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;
});