自定义MVC验证属性和引导程序格式问题

时间:2012-06-29 15:59:05

标签: asp.net-mvc jquery-validate twitter-bootstrap

我正在使用带有Twitter bootstrap的ASP.net MVC。

我添加了以下内容以使错误的字段在bootstrap

中正确设置样式
$.validator.setDefaults({
    highlight: function (element) {
        $(element).closest(".control-group").addClass("error");
    },
    unhighlight: function (element) {
        $(element).closest(".control-group").removeClass("error");
    }
});

除自定义验证属性外,这适用于所有验证。我创建的自定义验证器检查是否选中了复选框,如果不是,则要求在文本字段中输入某些内容。这只是一个示例,但我创建的其他自定义验证属性失败的方式与下面描述的相同。

如果我提交表单,除了带有我的自定义验证器的字段外,所有错误的样式都是正确的。但是我知道验证器已运行,因为出现错误消息,但消息和字段是黑色而不是红色。

如果我在字段中输入一些文本以满足验证器,则错误消息将消失。然后,如果我删除该文本,错误消息将返回,并且所有内容都应该是红色的样式。

然后,如果我再次提交表单,即使错误仍然存​​在,红色样式也会消失,但仅对于具有自定义验证器的字段,所有其他错误仍为红色。

在表单提交时,我没有为自定义验证器的字段运行我设置的默认值(如上所示),但默认值是针对其他所有内容运行的。

然而,随着使用自定义验证器的字段上的on blur和key up事件,一切都按预期运行,所有样式都按预期工作。

我不知道接下来要看什么。任何帮助/方向都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题,直到我发现我在同一.control-group内有有效和无效的输入。 (我的<input type="hidden">字段)。如果这也适用于您的情况,您可以使用errorClasshighlight方法提供的unhighlight,如下所示:

function highlight(element, errorClass, validClass) {
    $(element)
        .addClass(errorClass)
        .closest(".control-group")
        .addClass("error");
};

function unhighlight(element, errorClass, validClass) {
    var c = $(element)
        .removeClass(errorClass)
        .closest(".control-group");
    // make sure not to remove parent container error class, 
    //if there is still an invalid input field inside
    if (c.find("." + errorClass).length < 1) 
        c.removeClass("error");
};