Int или Number DataType для атрибута проверки DataAnnotation
В моем проекте MVC3 я сохраняю прогноз в отношении футбольной/футбольной/хоккейной/... спортивной игры. Итак, одно из свойств моего класса прогнозирования выглядит следующим образом:
[Range(0, 15, ErrorMessage = "Can only be between 0 .. 15")]
[StringLength(2, ErrorMessage = "Max 2 digits")]
[Remote("PredictionOK", "Predict", ErrorMessage = "Prediction can only be a number in range 0 .. 15")]
public int? HomeTeamPrediction { get; set; }
Теперь мне нужно также изменить сообщение об ошибке для типа данных int
в моем случае. Существует один по умолчанию используемый - "Поле HomeTeamPrediction должно быть числом". Необходимо найти способ изменения этого сообщения об ошибке. Это сообщение проверки также, по-видимому, принимает прогноз для удаленной проверки.
Я пробовал атрибут [DataType]
, но это не похоже на простое число в перечислении system.componentmodel.dataannotations.datatype
.
Ответы
Ответ 1
Для любой проверки числа вы должны использовать различные проверки диапазона в соответствии с вашими требованиями:
Для Integer
[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")]
для float
[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")]
для двойного
[Range(0, double.MaxValue, ErrorMessage = "Please enter valid doubleNumber")]
Ответ 2
Попробуйте регулярное выражение
[RegularExpression("([0-9]+)")] // for 0-inf or
[RegularExpression("([1-9][0-9]*)"] // for 1-inf
надеюсь, это поможет: D
Ответ 3
Использовать регулярное выражение в аннотации данных
[RegularExpression("([0-9]+)", ErrorMessage = "Please enter valid Number")]
public int MaxJsonLength { get; set; }
Ответ 4
Попробуйте этот атрибут:
public class NumericAttribute : ValidationAttribute, IClientValidatable {
public override bool IsValid(object value) {
return value.ToString().All(c => (c >= '0' && c <= '9') || c == '-' || c == ' ');
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) {
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.DisplayName),
ValidationType = "numeric"
};
yield return rule;
}
}
А также вы должны зарегистрировать атрибут в плагине валидатора:
if($.validator){
$.validator.unobtrusive.adapters.add(
'numeric', [], function (options) {
options.rules['numeric'] = options.params;
options.messages['numeric'] = options.message;
}
);
}
Ответ 5
public class IsNumericAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null)
{
decimal val;
var isNumeric = decimal.TryParse(value.ToString(), out val);
if (!isNumeric)
{
return new ValidationResult("Must be numeric");
}
}
return ValidationResult.Success;
}
}
Ответ 6
Прошло почти десять лет, но проблема по-прежнему актуальна и для Asp.Net Core 2.2.
Мне удалось это, добавив data-val-number
в поле ввода локализации использования в сообщении:
<input asp-for="Age" data-val-number="@_localize["Please enter a valid number."]"/>