Formato de moneda utilizando plantilla de visualización en MVC

Encontré esta publicación sobre Display y EditorTemplates para MVC:

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

Crea una plantilla de visualización para mostrar fácilmente un decimal con formato de signo de moneda.

El modelo utilizado en el ejemplo:

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

La plantilla de visualización:

Vistas / Shared / DisplayTemplates / decimal.cshtml:

@model decimal

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

En mi sitio web tengo una clase auxiliar con un método para recuperar una cadena de moneda formateada de un decimal, así que reemplazaría lo anterior con algo como:

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

Y finalmente la vista donde queremos ver la moneda formateada:

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

Salida:

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

Puedo implementar esto sin ningún problema. Pero, por supuesto, tengo diferentes puntos de vista donde quiero ver una moneda con formato. Pero en algunos casos no quiero mostrar el signo de la moneda.

Mi pregunta ahora es cómo debo implementar esta pequeña variación sin demasiado exceso de código.

Aquí está mi implementación actual:

He cambiado mi plantilla de pantalla a esto:

@model decimal

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

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

Por supuesto, también he cambiado al método GetCurrencyString para aceptar este atributo adicional.

En mi opinión, ahora tengo que proporcionar este atributo también:

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

Así que en realidad todo funciona como debería funcionar. Pero de alguna manera no me gusta esta solución que hace que la vista sea más compleja.

Mi pregunta para usted: ¿Hay algún otro método para implementar algo como esto? ¿O algún consejo para optimizar posiblemente mi solución actual?

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta