Как мне использовать EditorFor () в MVC для типа валюты / денег?

17

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

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

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

public decimal Cost { get; set; }

Однако это показывает десятичное значение с четырьмя цифрами после десятичной (например, 0,0000). Я знаю о Decimal.toString("G") ( MSDN ), который, как представляется, решает эту проблему, m неизвестно, где его применять.

Одним из решений является создание частичного представления «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?

    
задан Thomas Langston 22.02.2011 в 16:53
источник

2 ответа

37
[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) %>
    
ответ дан Darin Dimitrov 22.02.2011 в 16:59
источник
3

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

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

ответ дан jfar 22.02.2011 в 16:56
источник