Asp.net mvc 4 尝试向jQuery验证添加required会破坏其他一切

Asp.net mvc 4 尝试向jQuery验证添加required会破坏其他一切,asp.net-mvc-4,jquery-validate,Asp.net Mvc 4,Jquery Validate,我已经阅读了我能找到的所有其他jQuery验证问题,但没有任何东西对我有帮助。我正在尝试做一些应该如此简单但不引人注目的事情,验证让我想在我的四个显示器上打个洞(嫉妒?) 我有一个字段是select,另一个字段是日期选择器。当select具有某个值时,日期就成为必需的。对于所有其他选择值,日期是可选的。当页面第一次加载时,日期是可选的-也就是说,模型元数据中没有Required属性 这是我的脚本块以及我需要帮助的漏洞: <script type="text/javascript">

我已经阅读了我能找到的所有其他jQuery验证问题,但没有任何东西对我有帮助。我正在尝试做一些应该如此简单但不引人注目的事情,验证让我想在我的四个显示器上打个洞(嫉妒?)

我有一个字段是
select
,另一个字段是日期选择器。当select具有某个值时,日期就成为必需的。对于所有其他选择值,日期是可选的。当页面第一次加载时,日期是可选的-也就是说,模型元数据中没有
Required
属性

这是我的脚本块以及我需要帮助的漏洞:

<script type="text/javascript">
    function DateRequirement() {
        if ($("#StatusID").val() == 602) {
            $("#DateOfFirstCoverage").attr("data-val-required", "A date is required for current members.");
            // some kind of re-validating here?
        }
        else if ($("#DateOfFirstCoverage").attr("data-val-required") !== undefined) {
            $("#DateOfFirstCoverage").rules("remove", "required");
            // some kind of re-validating here?
        }
    }

    $("#StatusID").change(DateRequirement);
    $(document).ready(DateRequirement);
</script>

那么,到底发生了什么?在不打乱我的其他规则的情况下,实现我想要的东西的“正确”方法是什么?

找到了这个方法。正确的答案在另一篇文章中可以找到——但我必须想出如何使用它。最后一个脚本块如下所示:

<script type="text/javascript">
    function DateRequirement() {
        $("form").removeData("validator").removeData("unobtrusiveValidation");
        $.validator.unobtrusive.parse("form");

        if ($("#StatusID").val() == 602) {
            $("#DateOfFirstCoverage").rules("add", { required: true, messages: { required: "A date is required for current members." } });
        }
        else {
            $("#DateOfFirstCoverage").rules("remove", "required");
            $("form").validate().element("#DateOfFirstCoverage");
            console.log("reset");
        }
    }

    $("#StatusID").change(DateRequirement);
    $(document).ready(DateRequirement);
</script>

函数日期要求(){
$(“表格”).removeData(“验证人”).removeData(“不引人注目的验证”);
$.validator.unobtrusive.parse(“表单”);
if($(“#StatusID”).val()==602){
$(“#DateOffirstCollege”).rules(“添加”,{required:true,消息:{required:“当前成员需要一个日期。”}});
}
否则{
$(“DateOffirstCollege”)。规则(“删除”、“必需”);
$(“form”).validate().element(“#DateOffirstCollege”);
控制台日志(“重置”);
}
}
$(“#状态ID”)。更改(日期要求);
美元(文件)。准备就绪(日期要求);

移除顶部的验证器可以确保不引人注目的验证不会过早退出,因为验证器已经连接好了。这就解决了我的奇怪问题,为什么其他字段没有验证。然后,通过请求unobtrusive进行解析,始终会有一个验证器,因此我可以使用普通规则添加方法来处理所需的规则。

解决了这个问题。正确的答案在另一篇文章中可以找到——但我必须想出如何使用它。最后一个脚本块如下所示:

<script type="text/javascript">
    function DateRequirement() {
        $("form").removeData("validator").removeData("unobtrusiveValidation");
        $.validator.unobtrusive.parse("form");

        if ($("#StatusID").val() == 602) {
            $("#DateOfFirstCoverage").rules("add", { required: true, messages: { required: "A date is required for current members." } });
        }
        else {
            $("#DateOfFirstCoverage").rules("remove", "required");
            $("form").validate().element("#DateOfFirstCoverage");
            console.log("reset");
        }
    }

    $("#StatusID").change(DateRequirement);
    $(document).ready(DateRequirement);
</script>

函数日期要求(){
$(“表格”).removeData(“验证人”).removeData(“不引人注目的验证”);
$.validator.unobtrusive.parse(“表单”);
if($(“#StatusID”).val()==602){
$(“#DateOffirstCollege”).rules(“添加”,{required:true,消息:{required:“当前成员需要一个日期。”}});
}
否则{
$(“DateOffirstCollege”)。规则(“删除”、“必需”);
$(“form”).validate().element(“#DateOffirstCollege”);
控制台日志(“重置”);
}
}
$(“#状态ID”)。更改(日期要求);
美元(文件)。准备就绪(日期要求);
移除顶部的验证器可以确保不引人注目的验证不会过早退出,因为验证器已经连接好了。这就解决了我的奇怪问题,为什么其他字段没有验证。然后,通过请求unobtrusive进行解析,总会有一个验证器,因此我可以使用普通的rules add方法来处理所需的规则