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

时间:2013-05-09 15:44:17

标签: c# asp.net-mvc entity-framework razor

我有一个属性:

    public decimal myProperty { get; set; }

这是我的渲染:

    @Html.TextBoxFor(m => m.myProperty , new { @class = "percentage" })

我如何做百分比?

3 个答案:

答案 0 :(得分:9)

您可以使用[DisplayFormat]属性修饰视图模型属性,以便指定格式:

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

并在您看来:

@Html.EditorFor(x => x.myProperty)

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

答案 1 :(得分:0)

以下是我最后使用帖子中的一条建议的方式。

public class JobCand
{
    [Key]
    [HiddenInput(DisplayValue = false)]
    public int JC_ID { get; set; }

    public int Job_ID { get; set; }

    public int Candidate_ID { get; set; }

    [DataType(DataType.MultilineText)]
    [StringLength(250)]
    public string JC_Note { get; set; }

    [DisplayFormat(ApplyFormatInEditMode = false, DataFormatString = "{0:P0}")]
    [RegularExpression(@"[0-9]+(\.[0-9][0-9]?)?$", ErrorMessage = "Invalid rate")]
    public decimal? JC_Skill_Match_Pct { get; set; }

}

我将告诉你一件事与ASP.NET控件和C#.NET代码相比,格式化这种方式更容易。我喜欢MVC建议在实体类中执行此操作的方式。我为Clark County的Assessor办公室建立的应用程序需要大量带有$和%格式的会计显示。为了显示,编辑和提取以及更新数据库而来回转换的工作给我带来了很大的痛苦。更不用说我在混合中有更新面板。

答案 2 :(得分:-2)

@Html.TextBoxFor(m => (m.myProperty/10000).ToString("P"))

请参阅MSDN