Подтвердить что ты не робот

Как использовать 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?

4b9b3361

Ответ 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.

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