Jquery Asp.NETMVC和自定义的不引人注目的验证
我正试图让一个自定义规则“必须正确”起作用。大致基于: 我的问题是,当我提交表单时,客户端验证没有给我一个错误(没有显示验证文本)。 此外,我在jscript验证方法中设置了一个断点,它永远不会被触发。添加适配器的wireup代码确实会被触发。控制台中没有错误 我做错了什么 这是我在服务器端所拥有的:Jquery Asp.NETMVC和自定义的不引人注目的验证,jquery,asp.net-mvc,unobtrusive-validation,Jquery,Asp.net Mvc,Unobtrusive Validation,我正试图让一个自定义规则“必须正确”起作用。大致基于: 我的问题是,当我提交表单时,客户端验证没有给我一个错误(没有显示验证文本)。 此外,我在jscript验证方法中设置了一个断点,它永远不会被触发。添加适配器的wireup代码确实会被触发。控制台中没有错误 我做错了什么 这是我在服务器端所拥有的: public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable { public override b
public class MustBeTrueAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
if (value == null) return false;
try
{
return Convert.ToBoolean(value);
}
catch (InvalidCastException)
{
return false;
}
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata,
ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = this.ErrorMessage,
ValidationType = "mustbetrue"
};
}
}
在物体上:
[MustBeTrue(ErrorMessageResourceName = "Register_TermsNotAccepted", ErrorMessageResourceType = typeof(Resources.Global))]
public bool AcceptedTerms { get; set; }
客户端:
$(document).ready(function () {
jQuery.validator.addMethod("mustbetrue", function (value, element) {
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
jQuery.validator.unobtrusive.adapters.addBool("mustbetrue", "mustbetrue");
});
以及输出的相关HTML:
<input data-val="true" data-val-mustbetrue="You must accept the terms and conditions" data-val-required="The AcceptedTerms field is required." id="AcceptedTerms" name="AcceptedTerms" type="checkbox" value="true" class="valid">
如果您已经检查了是否启用了客户端验证(无论是在配置中还是在代码中),那么我猜这是因为您正在添加适配器,在不引人注目的验证脚本解析html后才不会偏离总体目标,但是复选框上是否需要就足够了?未选中的复选框不会通过网络发送,是吗(因此强制执行必需的)?是的,我听说人们说它可以工作,而无需添加新规则。然而,在实践中,我从来没有让它工作。即使在1或4处添加了“最小-最大”的组合。@由于非空布尔值总是有一个值,即False或True,因此它总是满足所需的属性。这里需要的不是必需的属性,而是确保它与某个值匹配的验证。Required只检查值是否存在,而不关心该值是否为0、1、true、false等。
$(document).ready(function () {
jQuery.validator.addMethod("mustbetrue", function (value, element) {
if (!this.depend(param, element))
return "dependency-mismatch";
return element.checked;
});
jQuery.validator.unobtrusive.adapters.addBool("mustbetrue", "mustbetrue");
});
<input data-val="true" data-val-mustbetrue="You must accept the terms and conditions" data-val-required="The AcceptedTerms field is required." id="AcceptedTerms" name="AcceptedTerms" type="checkbox" value="true" class="valid">