DisplayFor和ValueFor之间的区别

Mic*_*iey 8 asp.net-mvc view-helpers

我想知道之间的区别是什么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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果:

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"
Run Code Online (Sandbox Code Playgroud)

从我所看到的,没有使用的优势ValueFor而不是@Model.PropertyName

在寻找答案时,我偶然发现了这个问题,其中最受欢迎的答案虽然没有被选为最佳答案,但却给出了与我不同的结果.

任何人都知道为什么我们得到不同的结果和真正的用途是ValueFor什么?

Jam*_*mes 6

首先我也听说过ValueFor......但是,查看源代码似乎只使用针对模型的元数据进行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)
Run Code Online (Sandbox Code Playgroud)