2012-02-22 74 views
0

我想優雅地將我的用戶輸入的電話號碼轉換爲特定的電話號碼格式。數據註釋電話號碼轉換

  • 我想用dataAnnotation轉換這一點,正如 [dataType(dataType.Date)]顯示一個dateTimestring

即:

  • 0205938472到61205938472
  • 02 0593 8472到+61205938472
  • 0593 8472到61205938472(我將承擔從他們住的地方 或者其移動區號)
  • 02-0593-8472到61205938472

等,我也想轉換另一個方向:

  • 61205938472成(我選擇或者任何格式)02 0593 8472

我想這樣做是爲了促進可讀性的用戶,但保留了嚴格的數據鍵入數據庫。

問題

  1. 是採用這種方式被認爲是不好的做法一dataAnnotation?
  2. 我該如何寫dataAnnotation(/然後你會這麼做)?
    (請包括一些代碼)

    編輯:爲了澄清,我不希望有人爲我寫擴展名,我只是想要一個關鍵代碼和實現的例子。

請注意

  • 這些都是澳大利亞,新西蘭和國際格式化 號碼存儲爲國際格式的數字。
  • 與國際格式的數字轉換爲澳大利亞,新西蘭或國際格式取決於用戶的位置(我能確定)

回答

3

根據您正在使用的用戶界面,你也許可以做到這一點使用:

由於解析和formatti ng通常發生在UI層,我懷疑你會找到一個適用於數據/模型層的解決方案,它可以普遍使用,或者不僅僅是驗證。

在數據註釋命名空間中,有一個DataType.PhoneNumber,您可以將它附加到您的屬性。儘管您自己仍然有責任使用適當的顯示技術進行解析和格式化。

0
  1. 數據的註釋和數據類型是用於驗證,而不是轉換值。數據類型主要用於驗證知道從哪裏開始猜測。

二是要求太多人來編寫這樣的延伸,尤其是沒有表現出任何的努力。

+0

我明白了,我會澄清,我不是要求別人寫的擴展我。我只想要一些關於如何實現它的僞代碼,正如你所說的,一個數據註釋不用於轉換值,所以你會怎麼做? – MrJD 2012-02-22 02:38:23

+0

驗證只是爲了確保結構是有效的(您可能想使用'正則表達式數據註釋')。這實際上取決於你的實現以及你在「在數據庫中保留一個嚴格的數據類型」的地方。也許這是在一個控制器,或者一個管理器類,服務,工廠,存儲庫等等。這個數據與數據庫交互的任何地方都是轉換或邏輯需要發生。 – 2012-02-22 08:06:00

0

您可以使用DataTypeAttribute像這樣:

[DataType(DataType.PhoneNumber)] 
public string PhoneNumber{get; set;} 
+0

是的,但DataTypes不適用於數據驗證(即使它們來自ValidationAttribute)。奇怪,我知道。 – Rap 2012-08-16 14:22:38