我搜索了很多。也许我在寻找错误的地方......
我在产品列表中有产品清单和成本价格。模型的摘录:
[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中重现。
为什么忽略数据类型? 我怎样才能解决这个问题? 在我的想法中有什么不正确的地方我错过了这里有什么用处吗?
答案 0 :(得分:0)
有几种方法可以做到这一点。
@p.Product.CostPrice.ToString("C")
格式C
适用于Currency
。如果您想指定格式(美元,欧元,英镑......),您可以参考this。
另一种方法是指定DisplayFormat
属性:
[DisplayFormat(DataFormatString = "{0:C}")]
或
[DisplayFormat(DataFormatString = "${0:#,###0.00}")]