asp.net-mvc – DisplayFor和ValueFor之间的区别

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – DisplayFor和ValueFor之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道在最近我不知道的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)
原文链接:https://www.f2er.com/aspnet/248423.html

猜你在找的asp.Net相关文章