0

在我看来,我有 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'工作正常。我究竟做错了什么?

我会很感激任何帮助!

4

3 回答 3

1

$在选择器之前丢失了("#PeriodID")

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

演示:小提琴

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

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

演示:小提琴

注意:不需要添加这样的规则,因为它可以通过使用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>"
        }
    }
});

演示:小提琴需要规则

于 2013-10-08T09:56:01.833 回答
0

Use

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

instead of

("#PeriodID").val()
于 2013-10-08T10:00:48.980 回答
0

如果您的 addMethod 钩子没有被注册,很可能是因为您在 DOM Ready 处理程序中拥有代码,或者可能是一个闭包。尝试将代码移到任何 lambda 之外;然后,您应该能够让代码按需要运行。

有关更多详细信息,请参阅ASP .Net MVC 3:自定义非侵入式验证。它特定于“不显眼”的库,但推理是一样的。

于 2013-10-09T12:38:59.380 回答