DisplayFor和ValueFor之间的区别

时间:2014-04-02 11:31:57

标签: asp.net-mvc view-helpers

我想知道直到最近我才知道的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 真正的用途是什么?

1 个答案:

答案 0 :(得分:4)

首先我也听说过ValueFor ....但是,看source ValueFor只会使用元数据进行简单的渲染反对模型忽略任何相关模板(内置或自定义)。


进一步挖掘表明,实际上,ValueFor的结果相当于使用当前文化调用String.FormatConvert.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)