Meine Anwendung enthält viele Modelle, von denen viele prozentuale Daten enthalten. Diese werden als decimal
oder decimal?
structs im Modell dargestellt. Nicht alle Eigenschaften mit decimal
structs sind jedoch Prozentwerte. Einige sollten wie normale Dezimalzahlen behandelt werden.
Die Prozentsätze müssen besonders beachtet werden:
{0:P2}
format verwenden. (Ich habe dieses Teil funktioniert.) Ich habe den Weg zur Erstellung von PercentModelBinder
, der IModelBinder
implementiert, gestartet, aber dann habe ich festgestellt, dass Sie ModelBinderAttribute
nur auf eine Klasse anwenden können , keine Eigenschaft.
Was ist der beste Weg, um diesen Fall zu behandeln, wenn einige (aber nicht alle) eines Typs besondere Handhabung sowohl für die Anzeige als auch für die Bindung benötigen?
Jede Lösung, die ich finde, riecht schlecht nach Overkill und bekämpft den MVC-Rahmen. Sicherlich gibt es einen besseren Weg als:
Percentage
struct und verwenden Sie diese als Basis für die IModelBinder- und EditorTemplates oder decimal
und decimal?
und Ändern der Analyselogik basierend auf detaillierten Kenntnissen meines Modells oder Eine Möglichkeit besteht darin, ein benutzerdefiniertes Metadaten-Attribut zu schreiben:
%Vor%dekorieren Sie dann Ihre Ansichtsmodelleigenschaften, die Prozentsätze damit darstellen:
%Vor%und innerhalb des benutzerdefinierten Modellbinders testen, ob dieser Wert vorhanden ist:
%Vor%Jetzt können Sie dieses Modellbinder für alle Dezimalstellen registrieren.
Anstatt Ihre prozentualen Eigenschaften mit dezimalen Primitiven darzustellen (siehe Primitive Obsession ), erstellen Sie keinen Prozentwert Geben Sie die gewünschte Funktionalität ein? Du solltest viel flexibler sein, wenn du es so machst ...
An ein string
in Ihrem Ansichtsmodell binden. Dann, wenn die Konvertierung zurück zum realen Modell.
Tags und Links asp.net-mvc model-binding