Ich schreibe eine MVC3-Anwendung, die eine Reihe von monetären Daten aus einer Datenbank einliest. Das Problem, das ich habe, ist, dass diese Beträge alle in verschiedenen Währungen sind.
Wenn ich den Typ eines Feldes wie folgt einstelle:
%Vor% Ich erhalte die Nachkommastellen und ein Währungssymbol, das nett aussieht, aber es ist standardmäßig die lokale Währung des Benutzers. Ein US-Benutzer sieht 3.29
, während ein GB-Benutzer £423.29
sieht. Ich kann die Währung überschreiben, indem ich ein <globalization culture="{something}">
in der Web.config verwende, aber das setzt alle Währungsfelder global.
Was wäre der einfachste Weg, ein Feld so zu markieren, dass es mit den richtigen Dezimalstellen und Währungssymbolen dargestellt wird?
In einer idealen Welt würde ich gerne so etwas (für USD) machen können:
%Vor% und das muss immer als 9.38
dargestellt werden, aber das ist mit den eingebauten Anmerkungen nicht möglich.
So würde ich ein benutzerdefiniertes Attribut erstellen, das das Attribut DataType
und einen benutzerdefinierten HTML-Helfer erweitert. Es ist nicht unbedingt der einfachste Weg, aber es würde in der Zukunft Zeit sparen.
BEARBEITEN
Incorporated CultureInfo.CreateSpecificCulture(cultureName)
anstelle von switch
Benutzerdefiniertes Attribut
%Vor%Html-Helfer
%Vor%Sie können das Attribut in Ihrem Modell verwenden
%Vor%Dann können Sie in Ihrer Ansicht den Helfer mit
verwenden %Vor%Vorausgesetzt, dass Ihr Modell korrekt übergeben wird.
Offensichtlich müssen Sie eine Fehlerüberprüfung usw. durchführen.
Zeichne die Menge
%Vor%Erstellen Sie eine Methode, die in eine Zeichenfolge mit exakter Währung
konvertiert %Vor%Wenn Sie in Ihrer Datenbank zwei Felder oder Spalten gespeichert haben, eine für Wert und eine für Kultur.
Und im Repository oder dem Controller:
%Vor%Sie müssen die Kultur anwenden:
%Vor%In diesem Controller wurden Methoden überschrieben:
%Vor%Lesen Sie die ganze Technik in diesem Blog von NadeemAfana ASP.NET MVC 3 Internationalisierung
Tags und Links asp.net-mvc-3 globalization data-annotations currency