Jquery MVC不引人注目的客户端验证未启动
我想在ASP.NET MVC 4中实现客户端验证。在实现IClientValidable接口并添加适配器和客户端验证代码后,验证仍然无法工作。请参阅下面的代码: 自定义验证属性: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
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>