Как сделать проверку целочисленной модели в ASP.NET MVC 2

StackOverflow https://stackoverflow.com/questions/3548300

Вопрос

У меня есть регистрационная форма, и пользователь должен войти в квадратные кадры своего дома. Я хотел бы, чтобы это ценность было только целым числом. Есть ли способ подтвердить это значение с использованием атрибутов 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top