2012-06-11 24 views
9

Có cách nào tôi có thể sử dụng thuộc tính DisplayFormat trên thuộc tính mô hình chế độ xem để áp dụng định dạng DataFormatString cho số an sinh xã hội hoặc số điện thoại không? Tôi biết tôi có thể làm điều này với javascript, nhưng muốn có mô hình xử lý nó, nếu có thể.DisplayFormat.DataFormatString cho số điện thoại hoặc số an sinh xã hội

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

Trả lời

12

Sau đây sẽ hoạt động, tuy nhiên hãy chú ý sự khác biệt về loại cho thuộc tính Ssn.

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

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

Lưu ý, rằng để cho các định dạng được áp dụng bạn sẽ cần phải sử dụng các helper html sau theo quan điểm của bạn:

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

Hmm, tôi sẽ gặp rắc rối xung quanh với điều này, nhưng cả hai điện thoại và SSN được lưu trữ như VARCHAR trong cơ sở dữ liệu của tôi, vì vậy tôi sẽ phải làm một ít bước chân để có được những thuộc tính được thiết lập là 'long'. Không có cách nào để làm điều đó với các thuộc tính được gõ là 'chuỗi'? –

+1

Một tùy chọn, sẽ là thiết lập mô hình xem với thuộc tính loại dài và chú thích dữ liệu có liên quan và chỉ cần chuyển đổi loại giữa thực thể miền của bạn và xem mô hình: Convert.ToInt64 ("123456789") – Jesse

+2

lol ... downvotes tình yêu trên câu trả lời đã hơn một tuổi mà không có ý kiến ​​tương ứng .... – Jesse

0

Câu trả lời được chấp nhận là tuyệt vời nếu loại là một số nguyên, nhưng rất nhiều ids gió lên được đánh máy như là một chuỗi để ngăn chặn mất số 0 hàng đầu. Bạn có thể định dạng một chuỗi bằng cách chia nhỏ nó thành từng mảnh với Substring và làm cho nó có thể tái sử dụng bằng cách dán nó vào một DisplayTemplate.

Bên /Shared/DisplayTemplates/, hãy thêm một mẫu tên 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 

Bạn có thể gọi này trong một vài cách sau:

  1. Chỉ cần chú thích bất động sản trên mô hình của bạn với một kiểu dữ liệu của cùng một tên:

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

    Và sau đó gọi bằng cách sử dụng đơn giản DisplayFor:

    @Html.DisplayFor(Function(model) model.Phone) 
    
  2. Ngoài ra, bạn có thể chỉ định DisplayTemplate bạn muốn sử dụng theo tên:

    @Html.DisplayFor(Function(model) model.VimsOrg.Phone, "Phone") 
    
Các vấn đề liên quan