微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MVC3:通过jQuery验证需要复选框?

我想在MVC3项目中使用jQuery validate来强制使用“同意条款”复选框。我目前从“MS数据注释属性”“MS MVC3 unobtrusive jQuery验证”获得服务器/客户端DRY / SPOT验证。

这是一个独立的测试(由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/
但我没有看到有什么不同于我已经尝试过的东西。

这是真的为人们工作吗?为什么我不能让它为我工作?

解决方法

只需将你的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;
        }                
    });            
} (jQuery));

你实际上不需要编写自己的适配器,只需使用:

(function ($) {
    $.validator.unobtrusive.adapters.addBool("mandatory","required");
} (jQuery));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐