2009-03-13 13 views
1

Derzeit sehe ich, wenn der DefaultModelBinder Fehler, weil die Eingabe für den Typ ungültig ist (Zeichen in Int, ungültiges Datum, etc.) Ich bekomme UI Standard Fehlerzusammenfassung "Etwas ist schief gelaufen ..." aber keine spezifische Fehlermeldung bezüglich der spezifischen Eigenschaft, bei der die Konvertierung fehlgeschlagen ist.Modell Binding Typ Konvertierung Validierung

Zum Beispiel könnte eine Modelleigenschaft eine Datetime sein, die in der Zukunft auftreten muss. Es könnte mit einem Validator-Attribut versehen sein, das den Fehler "{Property}" enthält, ein Datum, das in der Zukunft auftreten muss. Beispiel 4/15/2009 ". Diese Nachricht könnte auch für Typkonvertierungsfehler relevant sein.

Wie kann ich beschreibende Fehlermeldungen ausgeben, wenn eine Typumwandlung während der Modellbindung fehlschlägt? Kundenspezifische Modellbinder, Filter, irgendwelche Beispiele würden geschätzt werden.

Seitennotiz: Ich habe mit Implementierungen von NHib Val, Castle Val, xVal Lib und anderen manuellen Methoden getestet, und all das funktioniert gut für mich, aber ich sehe nicht, dass sie mir helfen die Artkonvertierungsprobleme ...

UPDATE: Ich fand diesen Austausch, der S. Sanderson mitmacht (Schöpfer von xVal) auf der MVC Codeplex-Problemliste. Er diskutiert die Frage, die ich im Detail sehe ... http://aspnet.codeplex.com/WorkItem/View.aspx?WorkItemId=3230

Antwort

0

Ich persönlich mag die Validierung in der Entität mit Attributen und C# -Code zu sein, so dass ich denke, die folgende aproach zumindest ist ein Blick wert:

http://codebetter.com/blogs/david.hayden/archive/2009/01/31/asp-net-mvc-and-validation-using-idataerrorinfo-and-validation-application-block.aspx

Es bewirkt, dass die Entitäten IDataErrorInfo implementieren. Neben jeder Eigenschaft Validierungs Attribute überprüfen, können Sie auch für NULL-Werte überprüfen oder ungültige Würfe oder jede andere benutzerdefinierte Logik wie folgt aus:

Wenn es tut:

public string this[string columnName] 
    { 
     get 
     { 
      return DoValidation(columnName); 
     } 
    } 

Sie könnten so etwas wie:

public string this[string columnName] 
    { 
     get 
     { 
      if(columnName=="myDatePropertyName") 
      { 
       //Add custom logic (invalid casts or whatever) 
      } 
      return DoValidation(columnName); 
     } 
    } 

Was ich an diesem Modell nicht mag, ist zum Beispiel, die Validierungsfehlermeldungen in jede Eigenschaft zu schreiben, aber das ist ein guter Anfang.

Wie auch immer, dies ist ein Beispiel für ein Modell, das Ihre benutzerdefinierten Fehler an die relevante Eigenschaft bindet, so dass es später in Ihrer ValidationSummary angezeigt wird.

Hoffe das half!

Verwandte Themen