在DisplayTemplate中引用容器

时间:2012-02-16 12:33:28

标签: asp.net-mvc asp.net-mvc-3 razor

我有一个viewmodel类:

public class OrderLine {
    public string CurrencyCode { get; set; }
    public decimal PriceExVat { get; set; }
    public decimal PriceIncVat { get; set; }
}

我已经定义了一个自定义DisplayTemplate Currency.cshtml来格式化货币。

@Html.DisplayFor(m => m.PriceExVat, "Currency")
@Html.DisplayFor(m => m.PriceIncVat, "Currency")

Currency.cshtml

@model decimal?
@Model.ToString() // here I need a reference to container to get the CurrencyCode

我知道我可以使用additionalViewData将对容器对象的引用传递给显示模板:

@Html.DisplayFor(m => m.PriceIncVat, "Currency", new { conatiner = Model })

我只是想知道它是否已经在模板中可用。从ModelMetadata我只能获得ContainerType。

由于

1 个答案:

答案 0 :(得分:1)

为此,您最好的选择是创建自定义类:

public class Currency {
    public decimal Amount { get; set; }
    public string CurrencyCode { get; set; }
}

然后是OrderLine

public class OrderLine {
    public Currency PriceExVat { get; set; }
    public Currency PriceIncVat { get; set; }
}

DisplayFor来电中,您可以删除额外的参数,因为它会使用类型名称:

@Html.DisplayFor(m => m.PriceExVat

然后在 DisplayTemplates 文件夹中的 currency.cshtml 中:

@model Currency
@(CurrencyCode): @Amount

这样的东西会给你我想要的东西。