货币格式在视图组件上失败 - 解决方法?

时间:2017-04-25 07:55:11

标签: c# asp.net asp.net-mvc

我搜索了很多。也许我在寻找错误的地方......

我在产品列表中有产品清单和成本价格。模型的摘录:

    [Display(Name = "Cost Price")]
    [DataType(DataType.Currency)]       
    public decimal CostPrice { get; set; }

我在这个级别使用数据类型,它工作正常。

然后我从Kitset模型中引用产品模型。套件是一系列产品,用于制造完整的解决方案。一个现实世界的例子可能是轮胎,车轮,车轮螺母和轮毂盖。

 public class ProductKitset
{
    public int ProductKitsetID { get; set; }

    [Display(Name ="Kitset Name")]
    public int ProductKitsetNameID { get; set; }

    public decimal Quantity { get; set; }

    [Display(Name = "Product")]
    public int ProductID { get; set; }

    public Product Product { get; set; }

    public ProductKitsetName ProductKitsetName { get; set; }
}

然后有些人想要引用,引用可能包含一个或多个Kitset,我有第三个模型QuoteToKitset:

   public class QuoteToKitset
{
    public int QuoteToKitsetID { get; set; }

    public int QuoteID { get; set; }

    public int ProductKitsetID { get; set; }

    public Quote Quote { get; set; }

    public ProductKitset ProductKitset { get; set; }
}

在这个链的末尾,我有一个ViewComponent。 ViewComponent返回Quote中的kitset中包含的产品列表。目的是准备报价的人可以看到套件中的内容,以防他们需要添加另一个项目。回到我们的车轮示例,也许还需要一个盘式制动器转子。

这种方法可以正常工作并返回我想要的结果。为了完整性,viewComponent:

public class ProductKitsetsViewComponent :  ViewComponent
{
    private readonly Eva804Context _context;

    public ProductKitsetsViewComponent(Eva804Context context)
    {
        _context = context;
    }

    public IViewComponentResult Invoke(int id)
    {
        var productKitset = from p in _context.ProductKitset
                   .Include(p=>p.Product)
                   .Where(p => p.ProductKitsetNameID == id )                       
                   select p;

        return View(productKitset);
    }

}

然后在ViewComponent的默认视图中我有:

  @foreach (var p in Model)
    {
        <tr>
            <td>

                @p.Product.ProductCode
            </td>
            <td>

                @p.Quantity
            </td>
            <td>
                @p.Product.ProductDescription.Substring(0, Math.Min(p.Product.ProductDescription.Length, 38))
            </td>

            <td>

                @p.Product.CostPrice
            </td>

正如我所说,这很好。除了成本价格的格式。当我读到这篇文章时,我仍在学习进入这个复杂世界的方法,成本价格格式由产品模型中的DataType设置。

在现实世界中,格式未在ViewComponent中重现。

为什么忽略数据类型? 我怎样才能解决这个问题? 在我的想法中有什么不正确的地方我错过了这里有什么用处吗?

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

@p.Product.CostPrice.ToString("C")

格式C适用于Currency。如果您想指定格式(美元,欧元,英镑......),您可以参考this

另一种方法是指定DisplayFormat属性:

[DisplayFormat(DataFormatString = "{0:C}")]

[DisplayFormat(DataFormatString = "${0:#,###0.00}")]

根据this SO question