【问题标题】:How do I format decimal as Percentage in EF Code First rendered in Razor TextBoxFor?如何在 Razor TextBoxFor 中将小数格式化为 EF Code First 中的百分比?
【发布时间】:2013-05-09 15:44:16
【问题描述】:

我有一个财产:

    public decimal myProperty { get; set; }

这是我的渲染:

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

我如何计算百分比?

【问题讨论】:

  • 我回答得太快了,我肯定错了。我删除了我的答案。

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


【解决方案1】:

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

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

在你看来:

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

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

【讨论】:

  • 听起来不错,现在有没有办法为 EditorFor 应用 CSS 类?我有点需要css类。
【解决方案2】:

这就是我最终使用帖子中的一个建议的方式。

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 建议在实体类中做这一切的方式。我为克拉克县的评估员办公室构建的应用程序需要大量带有 $ 和 % 格式的会计显示。来回转换以进行显示、编辑和提取以及更新数据库的工作给我带来了很大的痛苦。更不用说我在组合中有更新面板。

【讨论】:

    【解决方案3】:
    @Html.TextBoxFor(m => (m.myProperty/10000).ToString("P"))
    

    见MSDN。

    【讨论】:

    • 这行不通。强类型助手只支持简单的 lambda 表达式。
    猜你喜欢
    • 2019-12-28
    • 2011-11-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2011-06-15
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多