重写DisplayFormat(DataFormatString)

时间:2011-08-03 14:41:01

标签: c# asp.net-mvc-3 razor viewmodel data-annotations

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)

当将上面的每个对象传递到剃刀视图时,我希望得到...

  • 1.23
  • 9.8

然而,DisplayFormat似乎没有与属性一起覆盖,而是我得到......

  • 1.23
  • 9.87

有谁知道怎么解决这个问题?

编辑: 对不起,不清楚。如果我有n * Derived Classes我怎么能以一种不涉及每种类型的新文件的方式解决问题?

1 个答案:

答案 0 :(得分:0)

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

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

然后在主Index.cshtml视图中:

@model MyBaseClass
@Html.DisplayForModel()