Asp.net mvc 为什么Html.DisplayTextFor忽略DisplayFormatAttribute?

Asp.net mvc 为什么Html.DisplayTextFor忽略DisplayFormatAttribute?,asp.net-mvc,data-annotations,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.

我在别处读到,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))

我很快地看了一眼。我假设您是通过DataAnnotations指定格式的

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

当您使用
@Html.DisplayTextFor(m=>m.Property)
帮助程序时,这似乎不适用,该帮助程序显然以执行一个简单的
ToString
结束。但是,当您使用
@Html.DisplayFor(m=>m.Property)
时,它会被应用,它通过
TemplateHelpers

调用。我看不出您在哪里使用DisplayFormat,或者您发布的代码中的任何格式字符串。我的错,我认为这是显而易见的。我的患者对象的Phone属性用DisplayFormat属性修饰。不,不明显。当你遇到问题时,你需要展示你所做的一切,因为你可能在那里犯了错误。所以用属性显示你的模型。是的,我也浏览了框架代码,注意到了和你一样的事情。我仍然满怀希望,尽管有人会向我展示我所缺少的东西:(我会研究如何使用DisplayForModel,谢谢。@PaulRivera-不是
DisplayForModel()
,只是
DisplayFor())
。对,我的原始答案引用了
DisplayForModel
,但我已经更新了它,因为
DisplayFor
也将使用
TemplateHelpers
,并尊重
DisplayFormat
。我用DisplayFor尝试了它,在框架中我可以看到不同之处,但是它仍然不起作用。嗯,它在我的工作环境中起作用我定义的测试视图如下。我能看到的唯一区别是,我的测试模型上直接有电话,而不是model.Patient.Phone:Whole display@Html.DisplayForModel()OnlyThePhone@Html.DisplayForModel(“OnlyThePhone”)DisplayTextFor@Html.DisplayTextFor(m=>m.Phone)DisplayFor@Html.DisplayFor(m=>m.Phone)