我想知道直到最近我才知道的ValueFor
和我用来显示值的DisplayFor
之间有什么区别。
我设置了一个测试项目,在其中我创建了一个具有2个属性的模型:
public class TestModel
{
[Display(Name = "Montant")]
[DisplayFormat(DataFormatString = "{0:C2}")]
public Decimal Amount
{
get;
set;
}
[Display(Name = "Date d'achat")]
[DataType(DataType.Date)]
public DateTime Date
{
get;
set;
}
}
以下是我得到的结果:
TestModel model = new TestModel
{
Amount = 1234.333M,
Date = DateTime.Today.AddDays(-10)
};
@Html.DisplayFor(x => x.Amout) => "1 234,33 €"
@Html.ValueFor(x => x.Amount) => "1234,333"
@Html.DisplayFor(x => x.Date) => "23/03/2014"
@Html.ValueFor(x => x.Date) => "23/03/2014 00:00:00"
从我看到的情况来看,使用ValueFor
代替@Model.PropertyName
在寻找答案的同时,我偶然发现了this question,其中最受欢迎的答案虽然没有被评为最佳答案,却给出了与我不同的结果。
任何人都知道为什么我们会得到不同的结果以及ValueFor
真正的用途是什么?
答案 0 :(得分:4)
首先我也听说过ValueFor
....但是,看source ValueFor
只会使用元数据进行简单的渲染反对模型忽略任何相关模板(内置或自定义)。
进一步挖掘表明,实际上,ValueFor
的结果相当于使用当前文化调用String.Format
或Convert.ToString
,具体取决于您是否提供自定义格式
@Html.ValueFor(x => x.Amount) = Convert.ToString(x.Amount, CultureInfo.CurrentCulture)
@Html.ValueFor(x => x.Amount, "0.00") = String.Format(x.Amount, "0.00", CultureInfo.CurrentCulture)