Форматирование валюты с использованием шаблона отображения в MVC

Я нашел этот пост о Display и EditorTemplates для MVC:

http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html

Он создает шаблон отображения для удобного отображения десятичной дроби в формате знака валюты.

Модель, использованная в примере:

public class TestModel
{
    public decimal Money { get; set; }
}

Шаблон отображения:

Views / Shared / DisplayTemplates / decimal.cshtml:

@model decimal

@{
    IFormatProvider formatProvider = 
        new System.Globalization.CultureInfo("en-US");
    <span class="currency">@Model.ToString("C", formatProvider)</span>
}

На моем веб-сайте у меня есть вспомогательный класс с методом для извлечения отформатированной строки валюты из десятичного числа, поэтому я бы заменил вышеупомянутое что-то вроде:

@model decimal
@(MyHelperClass.GetCurrencyString(Model))

И, наконец, вид, где мы хотим видеть отформатированную валюту:

@model TestModel    
@Html.DisplayFor(e => e.Money)

Выход:

<span class="currency">$3.50</span>

Я могу реализовать это без каких-либо проблем. Но, конечно, у меня разные взгляды, где я хочу просмотреть форматированную валюту. Но в некоторых случаях я не хочу показывать знак валюты.

Мой вопрос сейчас заключается в том, как мне реализовать эту небольшую вариацию без особых излишеств в коде.

Вот моя текущая реализация:

Я изменил свой шаблон отображения на это:

@model decimal

@{
    bool woCurrency = (bool)ViewData["woCurrency"]; 
 }

@(MyHelperClass.GetCurrencyString(Model)Model,woCurrency))

Конечно, я также изменил метод GetCurrencyString, чтобы принять этот дополнительный атрибут.

На мой взгляд, теперь я должен предоставить и этот атрибут:

@Html.DisplayFor(m => m.Money, new { woCurrency = true })

Так на самом деле у меня все работает так, как должно работать. Но почему-то мне не нравится это решение, которое делает взгляд более сложным.

Мой вопрос к вам: есть ли другой способ реализовать что-то подобное? Или какой-нибудь совет для возможной оптимизации моего текущего решения?

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос