Overriding DisplayFormat(DataFormatString)


public abstract class MyBaseClass
{
    [DisplayFormat(DataFormatString = "{0:0.00}")]
    public virtual decimal Value
    {
        get { return 1.23456m; }
    }
}
public class MyDerivedClassA : MyBaseClass
{
    [DisplayFormat(DataFormatString = "{0:0.0}")]
    public override decimal Value
    {
        get { return 9.87654m; }
    }
}
...
public class MyDerivedClassZ : MyBaseClass
{
    [DisplayFormat(DataFormatString = "{0:0.000}")]
    public override decimal Value
    {
        get { return 7.654321m; }
    }
}

@model MyBaseClass
@Html.DisplayFor(m => @Model.Value)

当将上面的每个to对象传递到razor视图时,我期望得到…

    1.23
  • 9.8

然而,DisplayFormat似乎没有覆盖随着属性,相反,我得到…

    1.23
  • 9.87

有人知道如何绕过这个吗?

编辑:抱歉,我没说清楚。如果我有n* Derived Classes,我如何解决这个问题而不需要为每种类型都创建一个新文件?

您可以编写一个自定义显示模板(~/Views/Shared/DisplayTemplates/MyDerivedClass.cshtml):

@model MyDerivedClass           
@Html.DisplayFor(x => x.Value)

,然后在主Index.cshtml视图中:

@model MyBaseClass
@Html.DisplayForModel()

相关内容

  • 没有找到相关文章

最新更新