Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 对DisplayTemplate中容器的引用_Asp.net Mvc_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net mvc 对DisplayTemplate中容器的引用

Asp.net mvc 对DisplayTemplate中容器的引用,asp.net-mvc,asp.net-mvc-3,razor,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 =&g

我有一个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


感谢您的帮助,您最好的选择是创建自定义类:

public class Currency {
    public decimal Amount { get; set; }
    public string CurrencyCode { get; set; }
}
然后对于订单行:

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

我相信这样做会满足您的需求。

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

public class Currency {
    public decimal Amount { get; set; }
    public string CurrencyCode { get; set; }
}
然后对于订单行:

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

像这样的东西会给你你想要的,我相信。

只是一个注释,
Currency
作为一个
struct
可能最有效,所以它的功能有点像一个标准的
decimal
,不确定是否可以将
CurrencyCode
调整为
enum
或其他类型,使其具有默认值。谢谢Paul。我也尝试过类似的方法,为CLR使用Money类型(在Codeplex上找到)。但是代码的编写和维护变得越来越复杂。我必须在任何地方使用构造函数来初始化结构,尝试添加不同货币的值时出现异常等。我想我将只使用additionalViewData将容器引用传递到DisplayTemplate。是的,不幸的是,除非父对象实际上是一个动作,否则无法访问父上下文,调用模板时,
ViewData
(和
Model
)实例将重新生成,因此这是您唯一的其他选项。请注意,
Currency
作为
struct
可能最有效,因此它的功能类似于标准的
十进制
,不确定是否可以将
CurrencyCode
调整为
enum
或其他类型,使其具有默认值。谢谢Paul。我也尝试过类似的方法,为CLR使用Money类型(在Codeplex上找到)。但是代码的编写和维护变得越来越复杂。我必须在任何地方使用构造函数来初始化结构,尝试添加不同货币的值时出现异常等。我想我将只使用additionalViewData将容器引用传递到DisplayTemplate。是的,不幸的是,除非父对象实际上是一个动作,否则无法访问父上下文,调用模板时会重新生成
ViewData
(和
Model
)实例,因此这是您唯一的其他选项。