我想知道在最近我不知道的ValueFor和我一直用来显示值的DisplayFor之间有什么区别.
我建立了一个测试项目,在其中我创建了一个具有2个属性的Model:
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的真正用途是什么?
解决方法
首先我也听说过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)