【问题标题】:How to format string property in MVC model class to be used in DisplayFor如何格式化 MVC 模型类中的字符串属性以在 DisplayFor 中使用
【发布时间】:2014-12-02 03:45:52
【问题描述】:

好的,我整天都在为这个简单的任务寻找解决方案。

我有一个 mvc 模型类,它有一个 BIC 属性和一个 NationalNumber 属性。麻烦的是 string 值。 我想使用 DisplayFor 助手在视图 BUT 上呈现属性,并应用格式。

为了完整性:NationalNumber 的格式是 '00.00.00-000.00' ,BIC 的格式是 AAAA BB CC

我尝试使用 DisplayFormat 属性注释我的属性,但这似乎只适用于日期时间、数值等......

[DisplayFormat(DataFormatString = "{0:##.##.##-###.##}")]

然后我查看了creating a custom DisplayFormat attribute,但这也适用于适用于日期时间、数值等的模式。您仍然需要在自定义属性的构造函数中提供 DataFormatString 值.但是过滤器似乎不适用于字符串!

目前我最终做了标记客户端(使用掩码插件),但这并不是我真正想要的!

总结一下:我想使用@Html.DisplayFor(x=>x.BicNumber) 并使用自定义格式渲染它,最好在我的视图模型上进行注释,BicNumber 是一个字符串。

提前致谢

【问题讨论】:

  • 您是否也检查过 MSDN 文档? msdn.microsoft.com/en-us/library/…
  • 您是否尝试在模型中创建属性以正确格式返回这些字段?
  • @DJKRAZE 这不是重复的。 DisplayFormat 从来没有为字符串工作过。
  • 它被标记为可能重复而不是明确重复。我也不确定为什么操作不能使用 string.format 函数和string.Format("{0:##.##.##-###.##}", what ever value needs to be formatted)

标签: c# asp.net-mvc model-view-controller string-formatting displayformat


【解决方案1】:

如果您的NationalNumberBIC 是单独的数据类型,您可以将create display templates 存储在~/Views/Shared/DisplayTemplates/NationalNumber.cshtml~/Views/Shared/DisplayTemplates/BIC.cshtml 下,然后它会自动按您的意愿工作。

如果您想将这些属性保留为字符串,那么自动方法将不适合您,因为为 string.cshtml 创建的显示模板会影响项目中的所有字符串。

因此,创建一个名为 ~/Views/Shared/DisplayTemplates/NationalNumber.cshtml 的显示模板,您可以在其中手动输出部分数字:

@model string
@String.Format("{0}.{1}.{2}-{3}.{4}", Model.Substring(0, 2), Model.Substring(2, 2), Model.Substring(4, 2), Model.Substring(6, 3), Model.Substring(9, 2))

(注意大写的Stringit is important)并明确指定:

@Html.DisplayFor(x=>x.NationalNumber, "NationalNumber")

【讨论】:

  • 我会在字符串数据类型的格式化字符串中添加唯一可用的选项是对齐,这就是为什么 DataFormatString 不起作用msdn.microsoft.com/en-us/library/txafckwd(v=vs.110).aspx
  • 这实际上是一个我从未想过的好方法,但我想在我们的自定义框架中抽象出这个逻辑,以便我们可以在所有项目中重用格式。使用您的方法,我们必须将其打包到 nuget 或其他东西中,以使其在每个项目中都能正常工作。我的想法更像是我的模型的 Formatter 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
  • 2016-07-04
  • 1970-01-01
相关资源
最近更新 更多