Как сделать проверку целочисленной модели в asp.net mvc 2 - PullRequest
21 голосов
/ 23 августа 2010

У меня есть форма регистрации, и пользователь должен ввести квадратные метры своего дома. Я хотел бы, чтобы это значение было только целым числом. Есть ли способ проверить это значение с помощью атрибутов asp.net mvc?

Ответы [ 4 ]

68 голосов
/ 13 сентября 2011

Поймите, что на это уже был дан ответ, но ответ Стефанвдса излишне сложен Просто используйте 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; }
26 голосов
/ 23 августа 2010

Да, это так, но вам придется создать плоскую версию объекта, который вы хотите создать, потому что проверка только с атрибутами запускается ПОСЛЕ того, как MVC преобразовал ваши данные в модель. который, если ваше значение равно int, не сможет проверить, если пользователь не ввел int, и вы получите сообщение об ошибке MVC вместо вашего сообщения об ошибке.

Вы можете опубликовать объект, который хотите сделать?

для плоской версии я имею в виду, что все даты и целые числа являются жалами в плоской версии.

тогда я использую это:

    [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 строк кода.

изменить: если 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;
    }
}
7 голосов
/ 11 января 2016

Я обычно использую атрибут диапазона так:

Положительный 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; }
0 голосов
/ 08 июля 2016

Хорошо использовать Range для поля int не получится, если у вас есть несколько букв, таких как "a".
Ошибка Handler не вызывается (ASP.NET CORE 1.0 RC2).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...