Währung formatieren mit display-Vorlage in MVC

Fand ich diesen Beitrag über Display und EditorTemplates für MVC:

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

Schafft es eine display-Vorlage, um einfach die Anzeige einer Dezimalstelle formatiert mit Währungszeichen.

Modell verwendet, im Beispiel:

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

Display template:

Views/Shared/DisplayTemplates/decimal.cshtml:

@model decimal

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

In meiner website habe ich eine helper-Klasse mit einer Methode auf, um eine formatierte Währung Zeichenfolge aus einer Dezimalzahl, so würde ich ersetzen, die oben mit etwas wie:

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

Und schließlich die Ansicht, wo wir wollen, um zu sehen, die formatierte Währung:

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

Ausgabe:

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

Kann ich dies umsetzen, ohne jedes problem. Aber natürlich habe ich andere Ansichten, wo ich, wenn eine formatierte Währung. Aber in einigen Fällen, die ich nicht wollen, um zu zeigen, das Währungszeichen.

Meine Frage ist jetzt, wie ich das umsetzen dieser kleinen variation, ohne zu viel des guten im code.

Hier ist meine aktuelle Umsetzung:

Habe ich geändert mein display Vorlage zu diesem:

@model decimal

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

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

Natürlich habe ich auch geändert, um GetCurrencyString Methode zu akzeptieren, dieses zusätzliche Attribut.

Meiner Ansicht, die ich jetzt haben, um dieses Attribut zu:

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

So, ich habe tatsächlich alles so funktioniert wie es funktionieren sollte. Aber irgendwie ich weiß nicht, wie diese Lösung eignet sich auch, das macht die Ansicht komplexer.

Meine Frage an Euch: gibt es irgendeine andere Methode zu implementieren, die so etwas wie das? Oder eine Beratung zu möglichen Optimierung meiner aktuellen sollution?

Dank!

InformationsquelleAutor ThdK | 2013-06-03
Schreibe einen Kommentar