我在视图中有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'
的验证工作正常。我究竟做错了什么?
我很感激任何帮助!
答案 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>"
}
}
});
答案 1 :(得分:0)
使用
$('select[id=PeriodID] option:selected').text();
而不是
("#PeriodID").val()
答案 2 :(得分:0)
如果您的addMethod挂钩未被注册,可能是因为您在DOM Ready处理程序中有代码,或者可能是闭包。尝试将代码移到任何lambdas之外;然后,您应该能够根据需要运行代码。
有关详细信息,请参阅ASP .Net MVC 3: Custom unobtrusive validation。它特定于“不引人注目”的库,但推理是一样的。