Asp.net mvc 为什么Html.DisplayTextFor忽略DisplayFormatAttribute?
我在别处读到,DisplayFormat只是以string.Format相同的方式使用DataFormatString。我试图显示一个长的电话号码;在控制台应用程序中,以下功能有效: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.
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)