Как сделать проверку целочисленной модели в ASP.NET MVC 2
-
30-09-2019 - |
Вопрос
У меня есть регистрационная форма, и пользователь должен войти в квадратные кадры своего дома. Я хотел бы, чтобы это ценность было только целым числом. Есть ли способ подтвердить это значение с использованием атрибутов ASP.NET MVC?
Решение
Да, это, но вам придется сделать плоскую версию объекта, которую вы хотите создать, потому что проверка с атрибутами проходит только после того, как MVC преобразовал ваши данные в модель. Который, когда ваше значение является INT, не сможет проверить, если пользователь не ввел INT, и вы получите сообщение об ошибке MVC вместо вашей errormessage.
Можете ли вы опубликовать объект, который вы хотите сделать?
С плоской версией я имею в виду, что все Dateims и 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;
}
}
Если моя ModelState действительна, я использую Automapper для преобразования My FlatModel в мою модель, которая составляет всего 2 строки кода.
Редактировать: если 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;
}
}
Другие советы
Понимаю, что это уже ответило, но ответ Stefanvds является неосуществимым. Просто используйте 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; }
Я обычно использую атрибут диапазона, как это:
Положительный int:
[Range(0,int.MaxValue)]
public int Id { get; set; }
Отрицательный int:
[Range(int.MinValue,-1)]
public int Id { get; set; }
Любой INT:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Хорошо, используя Range
для int
Поле не будет работать, если у вас есть несколько букв, как «A».
Ошибка Handler
не вызывается (ASP.NET CORE 1.0 RC2).