2016-08-30 35 views
0

我使用數據標註,它是關於電話本一個簡單的項目,我想補充一個人,我不知道爲什麼我收到值「(SomeNumber)」是無效的號碼

當我按下按鈕,創建

這裏是我的視圖模型DTO

值「09124573957」是不是在我的編輯框有效數

錯誤

[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的範圍。你的財產需要'字符串' –

+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個電話號碼)