我应该如何在MVC中使用EditorFor()获取货币/货币类型?

时间:2011-02-22 15:53:46

标签: c# asp.net-mvc currency

在我看来,我有以下电话。

<%= Html.EditorFor(x => x.Cost) %>

我有一个带有以下代码的ViewModel来定义Cost。

public decimal Cost { get; set; }

但是,这会显示十进制值,小数点后有四位数(例如0.0000)。我知道Decimal.toString("G")MSDN)似乎可以解决这个问题,但我不确定在哪里应用它。

一个解决方案似乎是创建一个局部视图“Currency.aspx”。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Decimal>" %>
<%= Html.TextBox(Model.ToString("g"), new { @class = "currency" }) %>

我的ViewModel中有[UIHint("Currency")]

这似乎不优雅。我认为这个问题已经在MVC框架或C#中的某个地方得到了解决,但我并不知道更清晰的解决方案。

在MVC中处理编辑货币值的适当方法是什么?

2 个答案:

答案 0 :(得分:41)

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

并在您看来:

<%= Html.EditorFor(x => x.Cost) %>

就是这样。

您可能希望应用自定义CSS类。你可以这样做:

<div class="currency">
    <%= Html.EditorFor(x => x.Cost) %>
</div>

然后在你的CSS中:

.currency input {
    /** some CSS rules **/
}

write a custom DataAnnotationsModelMetadataProvider,您可以:

[DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
[HtmlProperties(CssClass = "currency")]
public decimal Cost { get; set; }

然后在你看来:

<%= Html.EditorFor(x => x.Cost) %>

答案 1 :(得分:3)

如果您使用EditorFor模板,这是适当的方法。

“非常不优雅”是什么意思?