Jquery MVC不引人注目的客户端验证未启动

Jquery MVC不引人注目的客户端验证未启动,jquery,model-view-controller,unobtrusive-javascript,Jquery,Model View Controller,Unobtrusive Javascript,我想在ASP.NET MVC 4中实现客户端验证。在实现IClientValidable接口并添加适配器和客户端验证代码后,验证仍然无法工作。请参阅下面的代码: 自定义验证属性: namespace MvcApplication1.Models { [AttributeUsage(AttributeTargets.Property)] public class DateLessThanCurrentAttribute:ValidationAttribute,IClientValidatable

我想在ASP.NET MVC 4中实现客户端验证。在实现IClientValidable接口并添加适配器和客户端验证代码后,验证仍然无法工作。请参阅下面的代码: 自定义验证属性:

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
}
}
namespace mvcapapplication1.Models
{
[AttributeUsage(AttributeTargets.Property)]
公共类DateLessThanCurrentAttribute:ValidationAttribute,IClientValidable
{
公共DateLessThanCurrentAttribute(字符串errorMessage)
:base(错误消息)
{ }
受保护的重写ValidationResult有效(对象值,ValidationContext ValidationContext)
{
ValidationResult ValidationResult=ValidationResult.Success;
如果((DateTime)值>=DateTime.Now)
{
validationResult=新的validationResult(FormatErrorMessage(base.ErrorMessage));
}
返回验证结果;
}
#区域IClientValidable实现
公共IEnumerable GetClientValidationRules(ModelMetadata元数据、ControllerContext上下文)
{
字符串errorMessage=base.errorMessage;
ModelClientValidationRule dateLessthanCurrentValidationRule=新ModelClientValidationRule();
dateLessthanCurrentValidationRule.ErrorMessage=FormatErrorMessage(ErrorMessage);
dateLessthanCurrentValidationRule.ValidationType=“datelessthancurrent”;
生成返回日期小于CurrentValidationRule;
} 
#端区
}
}
Razor视图:

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

@LabelFor(model=>model.DateOfBirth)
@EditorFor(model=>model.DateOfBirth)
@Html.ValidationMessageFor(model=>model.DateOfBirth)

} @ActionLink(“返回列表”、“索引”) @节脚本{ @Scripts.Render(“~/bundles/jqueryval”) }
适配器和验证器:

/// <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;
});
//
/// 
$.validator.unobtrusive.adapters.addBool(“datelessthancurrent”);
$.validator.addMethod(“datelessthancurrent”,函数(值、元素、参数){
警惕(“嘿,你!!!”);
返回false;
});

哦,我发现了问题。下面的冗余线路是原因。删除这些行可以解决问题

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