我想知道ValueFor
和DisplayFor
之间的区别。最近我才知道ValueFor
,而我一直使用DisplayFor
来显示值。
我创建了一个模型,并设置了两个属性,在测试项目中进行测试:
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
更有优势。在寻找答案时,我偶然发现了这个问题。尽管最受欢迎的回答并没有被评为最佳答案,但它给出的结果与我的不同。
有人知道我们为什么会得到不同的结果,以及
ValueFor
的真正用途是什么吗?
ValueFor
时,您如何解释元数据(DataType
和DisplayFormat
)根本未被使用? - Mickaël DerrieyHtmlHelper.FormatValue
,它内部调用ViewDataDictionary.FormatValueInternal
,然后只是调用Convert.ToString
或String.Format
,具体取决于你是否提供了自定义格式参数。我已经修改了我的答案。 - James