Хорошо, вот что я сделал.
Написал свой собственный EditorTemplate для Int32 (Views / Shared / EditorTemplates / Int32.cshtml):
@model int?
@Html.TextBox("", Model.HasValue ? Model.Value.ToString() : "", new { data_val_integer = "Field must be an integer" })
Добавлен адаптер проверки (запустите это на $ (document) .ready:)
jQuery.validator.addMethod('integer',
function (value, element, params) {
return String.IsNullOrEmpty(value) || isInteger(value);
});
jQuery.validator.unobtrusive.adapters.add("integer", [],
function (options) {
options.rules['integer'] = {};
options.messages['integer'] = options.message;
});
Написал функцию Javascript isInteger
, которая выглядит следующим образом
function isInteger(value) {
return parseInt(value, 10) == value;
}
Теперь целочисленные поля дают приятное сообщение «Поле должно быть целым числом», если вы вводите что-либо с десятичной точкой.
Будем рады услышать о лучшем способе.