2012-06-11 45 views
9

有沒有辦法在視圖模型屬性上使用DisplayFormat屬性爲社會安全號碼或電話號碼應用DataFormatString格式?我知道我可以用javascript做到這一點,但如果可能的話,寧願讓模型處理它。DisplayFormat.DataFormatString爲電話號碼或社會安全號碼

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "???????")] 
public string Ssn { get; set; } 

回答

12

下面應該可以工作,但注意Ssn屬性的類型差異。

[DisplayFormat(DataFormatString = "{0:###-###-####}")] 
public long Phone { get; set; } 

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:###-##-####}")] 
public long Ssn { get; set; } 

注意,在爲了要應用的格式,你需要使用下面的HTML幫助您的觀點:

@Html.DisplayFor(m => m.Property) 
+2

嗯,我要去更動這一點,但是這兩個電話和SSN作爲VARCHAR存儲在我的數據庫中,所以我將不得不做一些步驟來讓這些屬性設置爲'long'。沒有辦法用類型爲'string'的屬性來做到這一點? –

+1

一個選擇,將設置一個視圖模型與屬性類型和相關的數據註釋,並簡單地轉換您的域實體和視圖模型之間的類型:Convert.ToInt64(「123456789」) – Jesse

+2

lol ... love downvotes on答案是超過一年沒有相應的評論... – Jesse

0

接受的答案是偉大的,如果該類型是一個整數,但是很多id被打成一個字符串來防止丟失前導零。您可以將一個字符串拆分爲Substring,並通過將其粘貼到DisplayTemplate中使其可重用。

裏面/Shared/DisplayTemplates/,添加模板命名Phone.vbhtml

@ModelType String 
@If Not IsNothing(Model) AndAlso Model.Length = 10 Then 
    @<span>@String.Format("({0}) {1}-{2}", 
       Model.Substring(0, 3), 
       Model.Substring(3, 3), 
       Model.Substring(6, 4))</span> 
Else 
    @Model 
End If 

您可以在幾種方法調用此:

  1. 只是相同的數據類型批註模型中的特性名稱:

    <DataType("Phone")> _ 
    Public Property Phone As String 
    

    然後使用一個簡單的DisplayFor

    @Html.DisplayFor(Function(model) model.Phone) 
    
  2. 或者,您可以指定DisplayTemplate你想通過名字來使用:

    @Html.DisplayFor(Function(model) model.VimsOrg.Phone, "Phone")