货币格式化MVC

我试图格式化一个Html.EditorFor文本框来进行货币格式化,我试图根据这个线程用于TextBoxFor上货币的String.Format 。然而,我的文本仍然显示为0.00,没有货币格式。

<div class="editor-field">
        @Html.EditorFor(model => model.Project.GoalAmount, new { @class = "editor-     field", Value = String.Format("{0:C}", Model.Project.GoalAmount) })

There is the code for what I am doing, and here is the html for that field in the website itself contained within the editor-field div of course.

<input class="text-box single-line valid" data-val="true" 
 data-val-number="The field Goal Amount must be a number." 
 data-val-required="The Goal Amount field is required."
 id="Project_GoalAmount" name="Project.GoalAmount" type="text" value="0.00">

Any help would be appreciated, thanks!

0
额外 编辑
意见: 1

1 答案

您可以使用 [DisplayFormat] 属性修饰您的 GoalAmount 视图模型属性:

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

并且在视图中简单地:

@Html.EditorFor(model => model.Project.GoalAmount)

EditorFor的助手的第二个参数根本不会做你认为它所做的。它允许您将其他ViewData传递给编辑器模板,它不是htmlAttributes。

另一种可能性是为货币(〜/ Views/Shared/EditorTemplates/Currency.cshtml )编写自定义编辑器模板:

@Html.TextBox(
    "", 
    string.Format("{0:c}", ViewData.Model),
    new { @class = "text-box single-line" }
)

接着:

@Html.EditorFor(model => model.Project.GoalAmount, "Currency")

或使用 [UIHint]

[UIHint("Currency")]
public decimal GoalAmount { get; set; }

接着:

@Html.EditorFor(model => model.Project.GoalAmount)
0
额外
为了满足正确的过载,我必须将您的 ViewData.Model 转换为 decimal 转换或解析为 TextBox 之一。 string.Format(“{0:c}”,(decimal)decimal.Parse(Model))))
额外 作者 The Muffin Man,
我需要在开始处添加 @model IFormattable 。此外,现在我们可以编写typesafe [DataType(DataType.Currency)] ,而不是 UIHint
额外 作者 Christian Gollhardt,
没有便士的货币(磅)的格式字符串是什么?我似乎还没有找到它。谢谢。
额外 作者 Doomsknight,
@DarinDimitrov我现在有! ;) 谢谢。
额外 作者 Doomsknight,
非常好,谢谢! :)
额外 作者 Ryan J,
很高兴看到这个问题帮助了不少人!
额外 作者 Ryan J,
这对我有帮助,但是我将 ApplyFormatInEditMode = true 设置为 ApplyFormatInEditMode = false - 当货币符号出现在编辑文本框中时,这会停止输入的验证消息必须是数字。 - 我认为用户应该知道他正在使用什么货币 - 任何方式如果它的多种货币管理,货币符号应该与价值一起存储,否则如果查看的话,如果数额是磅,美元或欧元,怎么知道?数据库。
额外 作者 ppumkin,
@Doomsknight,你有没有试过“{0:C0}”
额外 作者 Darin Dimitrov,
看起来不得不为这个场景创建一个自定义联编程序 - 这正是我要做的,如果我不得不支持这种情况。但是我会以这样的方式编写它,以便它使用装饰了视图模型属性的 DisplayFormat 属性并重新使用相同的格式进行显示和绑定。
额外 作者 Darin Dimitrov,
如何解决格式化货币字段在表单发布时与模型绑定导致的问题?由于在表单字段中有一个小数的无效字符,当表单发布时,绑定不会填充该值。看起来不得不为这种情况创建一个自定义联编程序...
额外 作者 Mark,
谢谢你,我的工作..
额外 作者 Janty,