【问题标题】:Microsoft's jQuery Validate Unobtrusive makes other validators skip validation微软的 jQuery Validate Unobtrusive 让其他验证器跳过验证
【发布时间】:2011-01-28 01:55:13
【问题描述】:

我在 MVC3 应用程序中使用不显眼的验证。对于一种形式,我需要进行一些非常复杂的验证。因此,我想我可以使用常规的 jQuery 验证插件。当使用自定义验证脚本并且页面中包含对jQuery.validate.unobtrusive.js 的引用时,自定义验证脚本将始终有效!

创建一个测试 html 文件(并包括 jquery.validate.jsjquery.unobtrusive-ajax.jsjquery.validate.unobtrusive.js)。提交以下表单时,将不会执行验证检查。删除对jquery.validate.unobtrustive.js 的脚本引用会使它们再次工作。有没有简单的方法解决这个问题?

<!DOCTYPE html>
<html>
<head>
    <title>Test Jquery</title>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.7/jquery.validate.js"></script>
    <script type="text/javascript" src="jquery.validate.js"></script>
    <script type="text/javascript" src="jquery.unobtrusive-ajax.js"></script>
    <script type="text/javascript" src="jquery.validate.unobtrusive.js"></script>
    <script type="text/javascript">
        $(function ()
        {
            var result = $("#commentForm").validate({
                rules:
                {
                    name: "required",
                    email: {
                        required: true,
                        email: true
                    },
                    comment: "required"
                }

            });

        });
    </script>
</head>
<body>
    <form id="commentForm" method="get" action="">
    <fieldset>
        <legend>A simple comment form with submit validation and default messages</legend>
        <p>
            <label for="cname">Name</label>
            <em>*</em><input id="cname" name="name" size="25" />
        </p>
        <p>
            <label for="cemail">E-Mail</label>
            <em>*</em><input id="cemail" name="email" size="25" />
        </p>
        <p>
            <label for="ccomment">Your comment</label>
            <em>*</em><textarea id="ccomment" name="comment" cols="22"></textarea>
        </p>
        <p>
            <input class="submit" type="submit" value="Submit" />
        </p>
    </fieldset>
    </form>
</body>
</html>

【问题讨论】:

    标签: asp.net-mvc jquery-plugins jquery asp.net-mvc-3


    【解决方案1】:

    当使用 ASP.NET MVC 3 不显眼的客户端验证时,您不应该像以前那样编写自定义规则。此外,您似乎已经包含了两次 jquery.validate.js 脚本,并且客户端验证不需要 jquery.unobtrusive-ajax.js 脚本。您应该在模型上使用 DataAnnotations 来指示验证规则,对于更复杂的场景,当您需要自定义规则时,您可以实现 IClientValidatable 接口并将自定义适配器附加到 jquery validate 插件。您可以查看以下说明此概念的答案:answer 1 和后续answer 2

    【讨论】:

    • 是的,第二个包含是示例中的错误。我会走IClientValidatable 路线。谢谢。
    • 亲爱的 Darin,我可以使用 IClientValidatable 来检查数据库中的值吗?例如使用自定义验证属性检查数据库中是否存在名称?
    猜你喜欢
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多