Как использовать EditorFor() в MVC для типа валюты/денег?
На мой взгляд, у меня есть следующий вызов.
<%= 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 или С#, но я не знаю о более чистых решениях.
Каков подходящий способ обработки значений валютных значений в MVC?
Ответы
Ответ 1
[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) %>
Ответ 2
Это подходящий способ, если вы используете шаблоны EditorFor.
Что означает "чрезмерно неэлегантный"?