为什么Html.DisplayTextFor忽略DisplayFormatAttribute?

时间:2011-11-23 20:10:27

标签: asp.net-mvc data-annotations

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

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

s =“800-555-1212”

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

@Html.DisplayTextFor(model => model.Patient.Phone)

显示的是8005551212

这是模型......

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

还尝试了DisplayFor,它也不起作用。

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

Html.Raw(string.Format("{0:###-###-####}", Model.Patient.Phone))

1 个答案:

答案 0 :(得分:12)

我快速浏览了MVC3 source。我假设您通过DataAnnotations指定格式

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

当您使用@Html.DisplayTextFor(m => m.Property)帮助程序时,似乎不会应用此功能,这显然最终会执行简单的ToString。但是,当您使用@Html.DisplayFor(m => m.Property)时会应用它,该TemplateHelpers会调用{{1}}。