1
我有一個視圖模型類:參照容器中DisplayTemplate
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。
感謝
只需要注意一點,'Currency'可能最適合作爲'struct',因此它的功能類似於標準的'decimal',不確定您是否可以將'CurrencyCode'修改爲'enum'或其他東西可以有一個默認值。 – 2012-02-16 14:33:47
謝謝保羅。我嘗試了類似的方式,通過使用CLR的Money Type(在Codeplex上找到它)。但是,編寫和維護代碼變得更加複雜。我不得不使用各地的構造函數來初始化結構,嘗試用不同的貨幣添加值時出現異常等。我想我只是使用additionalViewData將容器引用傳遞到DisplayTemplate中。 – Corneliu 2012-02-16 15:51:36
是的,不幸的是,除非父母碰巧實際上是一個動作,否則不會訪問父上下文,當模板被調用時,'ViewData'(和'Model')實例將被重建,所以這是您唯一的選擇。 – 2012-02-16 16:10:11