Подтвердить что ты не робот

Как сделать проверку модели Integer в asp.net mvc 2

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

4b9b3361

Ответ 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).