jQuery验证器addMethod不使用dropdownList

时间:2013-10-08 09:49:39

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

我在视图中有DropDownListFor:

@Html.DropDownListFor(model => model.PeriodCode,..., new { name = "Period", id = "PeriodID"})

我的验证如下:

jQuery.validator.addMethod('NonEmpty', function (value) {
    return ($("#PeriodID").val() != "");
}, '');

jQuery("#form").validate({
    rules: {
        Year: {
            required: true
        },
        Period: {
            NonEmpty: true
        }
    },
    messages: {
        Year: {
            required: "<div style='color:red'>Message 1 </div>"
        },
        Period: {
            NonEmpty: "<div style='color:red'>Message 2 </div>"
        }
    }
});

问题是我提交表单时未调用jQuery AddMethod函数,因此我的DropDownList未经过验证。但是,TextBox的名称为'Year'的验证工作正常。我究竟做错了什么?

我很感激任何帮助!

3 个答案:

答案 0 :(得分:1)

您在选择器$之前缺少("#PeriodID")

jQuery.validator.addMethod('NonEmpty', function (value) {
    return ($("#PeriodID").val() != "");
}, '');

演示:Fiddle

无论如何,验证器规则必须像 - 规则不应硬编码任何元素,它必须验证传递给它的值

jQuery.validator.addMethod('NonEmpty', function (value, elem, args) {
    return value != "";
}, '');

演示:Fiddle

注意:无需添加此类规则,因为可以使用required规则

来实现

更新:期间字段的名称不是Period PeriodCode

jQuery("#form").validate({
    rules: {
        Year: {
            required: true
        },
        PeriodCode: {
            NonEmpty: true
        }
    },
    messages: {
        Year: {
            required: "<div style='color:red'>Message 1 </div>"
        },
        PeriodCode: {
            NonEmpty: "<div style='color:red'>Message 2 </div>"
        }
    }
});

演示:Fiddlewith required rule

答案 1 :(得分:0)

使用

$('select[id=PeriodID] option:selected').text();

而不是

("#PeriodID").val()

答案 2 :(得分:0)

如果您的addMethod挂钩未被注册,可能是因为您在DOM Ready处理程序中有代码,或者可能是闭包。尝试将代码移到任何lambdas之外;然后,您应该能够根据需要运行代码。

有关详细信息,请参阅ASP .Net MVC 3: Custom unobtrusive validation。它特定于“不引人注目”的库,但推理是一样的。