Prozentuale Eigenschaften in MVC 3

9

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:

  • Für die Anzeige sollten sie {0:P2} format verwenden. (Ich habe dieses Teil funktioniert.)
  • Zum Bearbeiten sollten sie das gleiche Format wie die Anzeige haben, d. h. "95" oder "95%" oder "95.00%" binden alle auf einen Wert von 0,95.

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:

  • Erstellen Sie eine benutzerdefinierte Percentage struct und verwenden Sie diese als Basis für die IModelBinder- und EditorTemplates oder
  • Erneutes Implementieren des Standard-Bindungsverhaltens von decimal und decimal? und Ändern der Analyselogik basierend auf detaillierten Kenntnissen meines Modells oder
  • Implementieren eines benutzerdefinierten Modellbinders für jede Klasse, die eine prozentuale Eigenschaft enthält, oder
  • Verwenden gefälschter Proxy-Eigenschaften im Modell (d. h. Brechen von MVC)
Dave Mateer 29.08.2011, 19:36
quelle

3 Antworten

15

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.

    
Darin Dimitrov 30.08.2011, 06:50
quelle
1

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 ...

    
Eric King 29.08.2011 22:53
quelle
0

An ein string in Ihrem Ansichtsmodell binden. Dann, wenn die Konvertierung zurück zum realen Modell.

    
Daniel A. White 29.08.2011 19:37
quelle

Tags und Links