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)

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....