2016-08-30 2 views
0

Я использую аннотацию данных, и это простой проект о телефонной книге, которую я хочу добавить человек, я не знаю, почему я получаюЗначения «(SomeNumber)» не является допустимым для Номера

значения «09124573957» не является допустимой для Номера

ошибки под моим редактором поля в то время как я нажимаю кнопку Создать

вот мой DTO в модели представления

[Required(ErrorMessageResourceType = typeof(App_Globaliz.Resource1), ErrorMessageResourceName = "Number")] 
    [DisplayName("Number")] 
    // [Phone] 
    [Range (0, 09889999999, ErrorMessageResourceName = "Range", ErrorMessageResourceType = typeof(App_Globaliz.Resource1))] 
    public int Num { get; set; } 
-

вы должны знать, что я использую файл ресурсов, который я написал некоторые ошибки текст в нем, но это ошибка, я не знаю, откуда он пришел из

+2

из-за ведущего '0', и если это было удалено, в любом случае он будет вне диапазона для 'int'. Ваша собственность должна быть 'string' –

+3

Может быть, причина в том, что' int.MaxValue' меньше 9889999999? Попробуйте изменить 'int' на' long' – feeeper

ответ

2

Ваш range validator не работает, потому что числовая не поддерживают лидирующего нуля .. и range validator works on numeric type

Это будет работать, используя RegularExpression validator ... что-то вроде этого ...

[Required(ErrorMessageResourceType = typeof(App_Globaliz.Resource1), ErrorMessageResourceName = "Number")] 
[Display(Name = "Number")] 
[DataType(DataType.PhoneNumber)] 
[RegularExpression(@"^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$", ErrorMessage = "Not a valid number")] 
public string PhoneNumber { get; set; } 
+0

Хороший ответ, и я также собирался предложить (но вы уже использовали его)' DataType.PhoneNumber'. Кроме того, с проверкой диапазона - даже если вы удалили конечный ноль, число будет по-прежнему больше, чем 'int.MaxValue' (как уже указывал @StephenMuecke) :) –

0

Целые не поддерживают ведущие нули. Вы не должны видеть эту ошибку, если пытаетесь установить значение 9124573957. EDIT: это будет работать, только если вы используете long вместо int, чтобы сохранить значение, потому что 9124573957 больше, чем int.MaxValue.

Если вам необходимо поддерживать ведущие нули, вы должны сохранить значение как string.

+1

Максимальное значение для 'int' равно' 2147483647', поэтому оно все равно вызовет ошибку :) –

+0

То же самое произошло даже для 9124573957 – NeverTrust

+0

Как обычно, вы правы, Стивен. –

2

Количество типов данных (int, double и т. Д.) Предназначены для выполнения математики! Просто спросите себя: может ли быть полезно добавить два из этих чисел, например. в чем смысл суммы вашего номера телефона и вашего друга? Если это вообще не имеет смысла, это не число.

Номера телефонов являются строками, хотя их обычно называют номерами.

1

номера телефонов должны быть хранятся в виде строк, а не чисел

Потому что:

  1. Некоторые номера начинаются с 0 или +, которые не могут быть сохранены в любом числовом значении (например, «002121132434» или «+9772323212»
  2. Вам нужно будет искать номера телефонов, как строка (например, номер, начинающийся с определенными подстроками представляют конкретные регионы или конкретные поставщик услуг)
  3. Вам нужно будет сделать некоторые форматирование строк (например, " + 977-232-3212")
  4. вы никогда не должны делать математические операции (например, вы никогда не будете добавлять или вычитать 2 телефонные номера)