C# 带可为空的十进制更改格式的razor中的DisplayFor

C# 带可为空的十进制更改格式的razor中的DisplayFor,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我的模型上有一个属性,如: [DisplayFormat(DataFormatString = "{0:P0}")] public decimal ? Rate { get; set; } 在我看来,我有: <span class="large bold">- @Html.DisplayFor(x => x.Rate)</span> -@Html.DisplayFor(x=>x.Rate) 问题是:我需要显示的数字是28.71(十进制?) 如果

我的模型上有一个属性,如:

[DisplayFormat(DataFormatString = "{0:P0}")]
public decimal ? Rate {
    get;
    set;
}
在我看来,我有:

<span class="large bold">- @Html.DisplayFor(x => x.Rate)</span>
-@Html.DisplayFor(x=>x.Rate)
问题是:我需要显示的数字是
28.71
(十进制?) 如果
DisplayFor
带有
x=>x.Rate
则视图显示
2.871
,但如果
DisplayFor
带有
x=>x.Rate.Value
则视图显示正确的编号
28.71

这里发生了什么事

DataFormatString = "{0:C0}"
这应该可以完成任务。我认为P0用于百分比。

来自:

百分比(“p”)格式说明符将数字乘以100,然后 将其转换为表示百分比的字符串。精度 说明符指示所需的小数位数

{0:P0}
格式将显示您的十进制数(28.71)为28.71*100=
2871%
(假设您使用的是en-US文化)

如果您只想将百分号添加到数字并显示它,请使用以下命令:

[DisplayFormat(DataFormatString = "{0} %")]

但我想用它作为百分比是的。。。但这并不能回答我的问题。。数字
28.71
2871
不同,并且
Rate
Rate.Value
之间的差异给出不同的结果没有任何意义,这是有意义的。
DisplayFormat
属性仅适用于
Rate
属性。当您使用
Rate.Value
时,
DisplayFormat
不再工作,这就是您得到28.71的原因。我已经解释了为什么会得到
2871
(28.71*100=2871)。