Переопределение DisplayFormat (DataFormatString) - PullRequest
0 голосов
/ 03 августа 2011
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 голосов
/ 03 августа 2011

Вы можете написать собственный шаблон отображения (~/Views/Shared/DisplayTemplates/MyDerivedClass.cshtml):

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

, а затем внутри вашего основного Index.cshtml представления:

@model MyBaseClass
@Html.DisplayForModel()
...