【问题标题】:Why is Html.DisplayTextFor ignoring DisplayFormatAttribute?为什么 Html.DisplayTextFor 忽略 DisplayFormatAttribute?
【发布时间】:2011-11-23 20:10:27
【问题描述】:

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

【问题讨论】:

  • 我看不到你在哪里使用 DisplayFormat,或者你发布的代码中的任何格式字符串。
  • 我的错,我认为这很明显。我的 Patient 对象的 Phone 属性用 DisplayFormat 属性修饰。
  • 不,这并不明显。当你遇到问题时,你需要展示你所做的一切,因为你可能会在那里犯错。所以用属性展示你的模型。

标签: asp.net-mvc data-annotations


【解决方案1】:

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

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

当您使用 @Html.DisplayTextFor(m => m.Property) 帮助器时,这似乎不适用,显然最终会执行简单的 ToString。但是,当您使用通过TemplateHelpers 调用的@Html.DisplayFor(m => m.Property) 时会应用它。

【讨论】:

  • 是的,我也浏览了框架代码,发现和你一样。尽管有人会向我展示我缺少的东西,但我仍然充满希望:(我会考虑使用 DisplayForModel,谢谢。
  • @PaulRivera - 不是DisplayForModel(),只是DisplayFor()
  • 对,我的原始答案引用了DisplayForModel,但我已将其更新为DisplayFor 也将使用TemplateHelpers 并尊重DisplayFormat
  • 我用 DisplayFor 尝试过,通过框架我可以看到不同之处,但是它仍然不起作用。
  • 嗯。它在我定义如下的测试视图中起作用。我能看到的唯一区别是我的测试模型上直接有 Phone,而不是 model.Patient.Phone: Whole display @Html.DisplayForModel() OnlyThePhone @Html.DisplayForModel("OnlyThePhone") DisplayTextFor @Html.DisplayTextFor(m => m.Phone) DisplayFor @Html.DisplayFor(m => m.Phone)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2019-03-22
  • 2017-07-07
  • 2012-01-30
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多