Как мне использовать EditorFor () в MVC для типа валют / денег? - PullRequest
18 голосов
/ 22 февраля 2011

На мой взгляд, у меня следующий звонок.

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

У меня есть ViewModel со следующим кодом для определения стоимости.

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" }) %>

И [UIHint("Currency")] в моей ViewModel.

Это кажется не элегантным. Я предполагаю, что эта проблема была аккуратно решена где-то в рамках MVC или C #, но я не знаю более чистых решений.

Как правильно редактировать значения валют в MVC?

Ответы [ 2 ]

41 голосов
/ 22 февраля 2011
[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 **/
}

или написать пользовательский DataAnnotationsModelMetadataProvider , который позволит вам:

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

, а затем, по вашему мнению:

<%= Html.EditorFor(x => x.Cost) %>
3 голосов
/ 22 февраля 2011

Это подходящий способ, если вы используете шаблоны EditorFor.

Что означает «чрезмерно не элегантный»?

...