年の範囲を表す 2 つのフィールドを比較して、終了年が開始年より前でないことを検証する MVC 4 検証属性を作成しました。
次のJSを作成しました。
jQuery.validator.unobtrusive.adapters.add(
'yearrange', ['startyear', 'endyear'], function (options) {
options.rules['yearrange'] = options.params;
options.messages['yearrange'] = options.message;
}
);
jQuery.validator.addMethod(
'yearrange', function (value, element, params) {
var startYearElementName = params.startyear;
var endYearElementName = params.endyear;
var startYear = $('#' + startYearElementName).val();
var endYear = $('#' + endYearElementName).val();
if (startYear == '' || endYear == '') {
return true;
}
return (+startYear <= +endYear);
}, '');
ViewModel の両方のプロパティに検証属性を適用しています。
[YearRange("StartYear", "EndYear", "yearRangeInvalid")]
public int StartYear { get; set; }
[YearRange("StartYear", "EndYear", "yearRangeInvalid")]
public int EndYear { get; set; }
要約検証メッセージを使用したくありません。
検証グループを使用して、一方が変更されたときに両方のフィールドの再検証をトリガーできますか?
また、上記の adapters.add コールバックで構成できますか?
私は次のようなことを試みましたが失敗しました:
jQuery.validator.unobtrusive.adapters.add(
'yearrange', ['startyear', 'endyear'], function (options) {
options.rules['yearrange'] = options.params;
options.messages['yearrange'] = options.message;
jQuery.validator.groups[options.params.startyear] = "yearrange";
jQuery.validator.groups[options.params.endyear] = "yearrange";
}
);