Mise en forme de la monnaie à l'aide du modèle d'affichage en MVC

J'ai trouvé ce post sur l'Affichage et EditorTemplates pour MVC:

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

Il crée un modèle d'affichage pour afficher facilement une virgule formaté avec change de signe.

Le modèle utilisé dans l'exemple:

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

Le modèle d'affichage:

Views/Shared/DisplayTemplates/décimal.cshtml:

@model decimal

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

Dans mon site web, j'ai une classe d'assistance avec une méthode pour récupérer formaté la monnaie chaîne à partir d'une virgule, donc je voudrais remplacer le ci-dessus avec quelque chose comme:

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

Et enfin le point de vue où nous voulons afficher la mise en forme de la monnaie:

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

De sortie:

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

Je peut mettre en œuvre sans aucun problème. Mais bien sûr, j'ai différents points de vue où je veux afficher une formaté de la monnaie. Mais dans certains cas, je ne veux pas afficher le symbole de devise.

Ma question maintenant est de savoir comment je doit mettre en œuvre cette petite variation sans trop exagéré dans le code.

Voici mon actuel de mise en œuvre:

J'ai changé mon modèle d'affichage:

@model decimal

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

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

Bien sûr, j'ai aussi changé de GetCurrencyString méthode d'accepter cet attribut supplémentaire.

De mon point de vue, j'ai maintenant de fournir cet attribut:

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

Donc en fait j'ai tout fonctionne comme il devrait fonctionner. Mais de toute façon je n'aime pas cette solution qui permet d'avoir une vue plus complexe.

Ma question pour vous: Est-il une autre méthode pour mettre en place quelque chose comme ça? Ou les conseils d'possible d'optimiser ma solution?

Merci!

OriginalL'auteur ThdK | 2013-06-03