为什么Html.DisplayTextFor忽略DisplayFormatAttribute?

Pau*_*era 12 asp.net-mvc data-annotations

我在其他地方读到DisplayFormat只是以与string.Format相同的方式使用DataFormatString.我试图显示一个长的电话号码; 在控制台应用程序中,以下工作:

const string PhoneFormat = "{0:###-###-####}";
long? phone = 8005551212;
string s = string.Format(PhoneFormat, phone);
Run Code Online (Sandbox Code Playgroud)

s ="800-555-1212"

为什么当我在我的视图中使用它时

@Html.DisplayTextFor(model => model.Patient.Phone)
Run Code Online (Sandbox Code Playgroud)

显示的是8005551212

这是模特......

public class Patient
{
    [DisplayFormat(DataFormatString = "{0:###-###-####}")]
    public long? Phone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还试过DisplayFor,这也行不通.

似乎对我有用的唯一方法是

Html.Raw(string.Format("{0:###-###-####}", Model.Patient.Phone))
Run Code Online (Sandbox Code Playgroud)

Dav*_*tka 12

我快速浏览了MVC3源代码.我假设你通过DataAnnotations指定你的格式

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

当您使用@Html.DisplayTextFor(m => m.Property)显然最终做简单的帮助时,看起来这不适用ToString.然而,当你使用它时@Html.DisplayFor(m => m.Property),它会被应用TemplateHelpers.