如何格式化十进制为在Razor TextBoxFor中呈现的EF Code First中的百分比?

Bil*_*ill 2 c# asp.net-mvc entity-framework razor

我有一个属性:

    public decimal myProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是我的渲染:

    @Html.TextBoxFor(m => m.myProperty , new { @class = "percentage" })
Run Code Online (Sandbox Code Playgroud)

我该如何做百分比?

Dar*_*rov 9

您可以使用[DisplayFormat]允许您指定格式的属性来装饰视图模型属性:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:P2}")]
public decimal myProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

在你看来:

@Html.EditorFor(x => x.myProperty)
Run Code Online (Sandbox Code Playgroud)

但要小心,因为DisplayFormat属性(顾名思义)仅用于显示目的.默认模型绑定器不使用它.因此,当用户通过发布表单提交此值时,您将获得验证错误,因为例如0.45%不是有效的十进制值.我已经说明了this post如何定义自定义模型绑定器,它将在绑定值时使用DisplayFormat属性定义的格式.