如何自动附加到十进制数据类型DisplayFormatAttribute

时间:2017-03-21 13:57:38

标签: c# asp.net-mvc entity-framework

我使用的是Entity Framework v6.1.3(代码优先)和ASP.NET MVC v5.2.3

我知道我可以在 decimal 数据类型中使用 DisplayFormatAttribute

[DisplayFormat(ApplyFormatInEditMode = false, DataFormatString = "{0:N2}")]
public decimal Foo { get; set; }

现在我需要将此属性自动应用于每个实体中的每个十进制

这可能吗?

我有类似的要求,每个小数必须具有20,8的精度,我使用此代码

解决了这个问题
public class EntitiesContext : DbContext
{
   protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
      // Set all decimals data types by default as Decimal(20, 8)
      modelBuilder.Properties<decimal>().Configure(c => c.HasPrecision(20, 8));
   }
}

所以我想知道是否可以自动分配 DisplayFormatAttribute

3 个答案:

答案 0 :(得分:3)

您可以为十进制类型创建显示模板并将其放到 Views / Shared / DisplayTemplates 文件夹中:

@model System.Decimal
<span>  
    @Model.ToString("n2")
</span>

在视野中,只需使用DisplayForDisplayForModel方法:

@Model.DisplayFor(m => m.Foo)

进一步阅读:What are Display and Editor Templates?

答案 1 :(得分:2)

您可以为十进制类型创建一个DisplayTemplate,每个小数的格式都是相同的。

来自argparse

定义自定义模板

我们可以通过将自定义显示模板放入路径Views / Shared / DisplayTemplates / .cshtml来覆盖默认模板。它们的结构与任何MVC局部视图类似。示例用法可以是在小数值的前面添加美元符号。 模型

public class TestModel
{
    public decimal Money { get; set; }
}

查看/共享/ DisplayTemplates / decimal.cshtml

@model decimal

    @{
        IFormatProvider formatProvider =
            new System.Globalization.CultureInfo("en-US");
        <span class="currency">@Model.ToString("C", formatProvider)</span>
    }

查看

@model TestModel

@Html.DisplayFor(e => e.Money)

答案 2 :(得分:0)

进行深度搜索我找到了答案

无法完成

这是答案

Can attributes be added dynamically in C#?