Ответ 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;
}
}