У меня есть регистрационная форма, и пользователь должен ввести квадратную метку своего дома. Я хотел бы, чтобы это значение было целым числом. Есть ли способ проверить это значение с помощью атрибутов asp.net mvc?
Как сделать проверку модели Integer в asp.net mvc 2
Ответ 1
да, это так, но вам придется создать плоскую версию объекта, который вы хотите создать, потому что проверка только с атрибутами выполняется. AFTER MVC преобразует ваши данные в модель. который, когда ваше значение является int, не сможет проверить, не ввел ли пользователь int, и вы получите сообщение об ошибке MVC вместо вашей ошибки.
можете ли вы опубликовать объект, который хотите сделать?
с плоской версией я означает, что все datetimes и ints являются укусами в плоской версии.
то я использую это:
[DisplayName("Square meters")]
[PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
public string squaremeters { get; set; }
в том же файле
public class PosNumberNoZeroAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal == 0)
return false;
if (getal > 0)
return true;
}
return false;
}
}
если мое модельное состояние допустимо, я использую AutoMapper для преобразования моего FlatModel в мою модель, которая представляет собой всего лишь 2 строки кода.
edit: если 0 - допустимое число:
public class PosNumberAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal >= 0)
return true;
}
return false;
}
}
Ответ 2
Поймите, что на это уже был дан ответ, но ответ Стефанвдса неоправданно сложный. Просто используйте MVC, встроенные в атрибуты проверки:
[DisplayName("Square Feet")]
[Required(ErrorMessage = "Square Feet is Required")]
[Range(0, int.MaxValue, ErrorMessage = "Square Feet must be a positive number")]
public int SquareFeet { get; set; }
Ответ 3
Я обычно использую атрибут range следующим образом:
Положительный int:
[Range(0,int.MaxValue)]
public int Id { get; set; }
Отрицательный int:
[Range(int.MinValue,0)]
public int Id { get; set; }
Любой int:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Ответ 4
Хорошо использовать Range
для поля int
не будет работать, если у вас есть буквы типа "a".
Ошибка Handler
не вызывается (ASP.NET CORE 1.0 RC2).