gpt4 book ai didi

asp.net - 如何在 mvc 3 razor View 中将可为 null 的小数格式化为货币,仅用于显示目的

转载 作者:行者123 更新时间:2023-12-02 05:12:18 25 4
gpt4 key购买 nike

我需要帮助在 mvc 应用程序的 razor View 中将可为 null 的十进制字段格式化为货币(带有美元符号和逗号)。下面是我的模态和 View 代码。

型号:

[Display(Name = "Eligible Amount")]
[RequiredIfProjectEngineerSelected("ProjectEngineerId", "", ErrorMessage = "Eligible Amount field is Required")]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal? EligibleAmount { get; set; }

查看:

@{var formated = String.Format("{0:c}",  decimal)decimal.Parse(@Model.project.ProjectTotalCost.HasValue ? @Model.project.ProjectTotalCost.Value.ToString() : ""));}
@Html.TextBoxFor(model => model.project.ProjectTotalCost, new { @Value = formatted})

它在 TextBoxFor 控件中显示格式化的货币值。但我在这里面临的问题是,当我尝试更新值时,出现验证错误“值不匹配格式”。

最佳答案

首先,您应该将 View 中显示的两行代码替换为一行代码:

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

这将考虑您在模型中定义的 DisplayFormat 属性,您无需在 View 中重复此格式。您只需将 ApplyFormatInEditMode 属性设置为 true 即可在编辑模式下启用它:

[Display(Name = "Eligible Amount")]
[RequiredIfProjectEngineerSelected("ProjectEngineerId", "", ErrorMessage = "Eligible Amount field is Required")]
[DisplayFormat(DataFormatString = "{0:c}", ApplyFormatInEditMode = true)]
public decimal? EligibleAmount { get; set; }

好了,显示部分就这样解决了。但是模型绑定(bind)部分仍然是一个问题。为此,您可以编写一个自定义模型 Binder ,它将考虑您的 DisplayFormat 属性中定义的格式。我已经在 this post 展示了一个带有 DateTime 的模型 Binder 示例。 .您所要做的就是将其调整为 decimal 时间,这应该是一项微不足道的任务。

关于asp.net - 如何在 mvc 3 razor View 中将可为 null 的小数格式化为货币,仅用于显示目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15235001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com