12

有没有办法可以使用DisplayFormat视图模型属性上的属性来应用DataFormatString社会保险号或电话号码的格式?我知道我可以用 javascript 来做到这一点,但如果可能的话,我更愿意让模型来处理它。

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

2 回答 2

15

以下应该有效,但请注意 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)
于 2012-06-11T14:11:08.030 回答
2

如果类型是整数,则接受的答案很好,但是很多 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")
    
于 2017-01-13T14:23:04.197 回答