这是一个独立的测试(由MVC3生成的纯HTML)。为什么它不工作,请?运行时,验证确保“联系人名称”字段已填充,但不关心复选框的状态。
<!DOCTYPE html> <html> <head> <title>requiredCheckBox</title> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script> <script type="text/javascript" src="//ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.js"></script> <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script> <script type="text/javascript" language="javascript"> $(function () { // http://itmeze.com/2010/12/checkBox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/ $.validator.unobtrusive.adapters.add("mandatory",function (options) { options.rules["required"] = true; if (options.message) { options.messages["required"] = options.message; } } }); $.validator.unobtrusive.parse(document); }); </script> </head> <body> <div> <form> <input data-val="true" data-val-mandatory="The field Terms Are Accepted is invalid." id="isTermsAccepted" name="isTermsAccepted" type="checkBox" value="true" /> <input name="isTermsAccepted" type="hidden" value="false" /> <span class="field-validation-valid" data-valmsg-for="isTermsAccepted" data-valmsg-replace="true"></span> <input data-val="true" data-val-required="The Contact Name field is required." id="contactName" name="contactName" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="contactName" data-valmsg-replace="true"></span> <button type="submit">Submit</button> </form> </div> </body> </html>
这篇文章的其余部分只是我的研究笔记。
设置数据注记属性[必填]没有帮助:
http://forums.89.biz/forums/MVC+3+Unobtrusive+validation+does+not+work+with+checkboxes+(jquery+validation)+and+the+fix+for+it。
没关系。什么“需要”意味着一个复选框显然是一个神圣的战争,我不想涉入,其中MS认为他们比jquery团队更好。在本地胁迫应该是一个简单的问题:
$(“form”)。validate({rules:{cbAgreeToTerms:“required”}});
…对?不,因为:
http://blog.waynebrantley.com/2011/01/mvc3-breaks-any-manual-use-of-jquery.html
http://pinoytech.org/question/4824071/microsofts-jquery-validate-unobtrusive-makes-other-validators-skip-validation
什么?这是很臭的cheezy! (当然,恕我直言。)
现在,我试过这个解决方案:
http://itmeze.com/2010/12/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/
它没有为我工作。这篇作者的悬疑评论和一些货币使用的倒立CHECKBox测试从他的/她的文章的早期,让我想知道它是否真的为他/她,然后涉及什么其他巫毒?
注意我认为JS的最后一段代码相当于更清洁:
$ .validator.unobtrusive.adapters.addBool(“brequired”,“required”);
最后一篇文章建议:
http://forums.asp.net/p/1648319/4281140.aspx#4281140
但请注意,作者评论他还没有调试它。它不适合我,在线条之间阅读,我想他意味着它不为他工作?
unobtrusive.js调用解析docready,所以我试图调用,但它没有帮助我。
$ .validator.unobtrusive.parse(document);
我也发现了一些类似的文章,没有谈到要求任何类型的初始化。也许他们都在本地编辑原始/公共unobtrusive.js?我宁愿不是如果我可以帮助它,这不是适配器是什么?
我发现stack-overflow文章,大致相同,以及更复杂的例子:
ASP .Net MVC 3 unobtrusive custom client validation.
Perform client side validation for custom attribute
http://xhalent.wordpress.com/2011/01/27/custom-unobstrusive-jquery-validation-in-asp-net-mvc-3/
但我没有看到有什么不同于我已经尝试过的东西。
这是真的为人们工作吗?为什么我不能让它为我工作?
解决方法
(function ($) { // http://itmeze.com/2010/12/checkBox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/ $.validator.unobtrusive.adapters.add("mandatory",function (options) { options.rules["required"] = true; if (options.message) { options.messages["required"] = options.message; } }); } (jQuery));
你实际上不需要编写自己的适配器,只需使用:
(function ($) { $.validator.unobtrusive.adapters.addBool("mandatory","required"); } (jQuery));