2016-08-07 22 views
0

Ich habe ein Modell, an dem ich Anmerkungen von Datenvalidierung verwenden, wie folgt aus:Validierung von ASP.NET-Datenanmerkungen - Fehler bei Validierungen auf niedriger Ebene ausblenden?

public int Id { get; set; } 

[Required(ErrorMessage = "Please enter the Sample Description.")] 
public string Description { get; set; } 

[Required(ErrorMessage = "Please enter the Start Date.")] 
[DataType(DataType.Date)] 
public DateTime StartDate { get; set; } 

Daten über eine API eingesetzt wird und, wenn die Validierung fehlschlägt, würde ich zurückgeschickte Nachrichten Fehler zu übernehmen möchten und setzen sie direkt auf den Bildschirm.

Dies ist für so etwas wie dies in Ordnung ist:

[Required(ErrorMessage = "Please enter the Sample Description.")] 
public string Description { get; set; } 

Aber im Fall der Integer-Eigenschaft gezeigt, „Id“, und der Client sendet, einen Wert, der nicht in eine ganze Zahl umgewandelt werden kann, zum Beispiel „x“, dann bekommt man eine geringe Meldung wie diese zurückgegeben:

"Could not convert string to integer: x. Path 'Id', line 1, position 9. 

Was will ich wirklich eine Meldung wie

"Please provide an integer for the Id". 
mehr

Gibt es trotzdem eine Datenvalidierung durch Annotation und trotzdem eine nützlichere Nachricht als das, was ich bekomme?

Antwort

0

paar mögliche Optionen:

(1) In 4 MVC können Sie die Fehlermeldung mit Html.ValidationMessageFor. Wie in der Ansicht ändern:

@Html.ValidationMessageFor(model => model.YourIntField, "Please provide an integer for the Id".) 

Im Modell:

[DataType(DataType.Int)] public int YourIntField { get; set; }

(2) für eine beliebige Anzahl Validierung müssen Sie verschiedene andere Bereich Validierung verwenden, wie pro Ihre Anforderungen

Für Integer

[Range(0, int.MaxValue, ErrorMessage = "Please enter valid integer Number")] 

Für Schwimmer:

[Range(0, float.MaxValue, ErrorMessage = "Please enter valid float Number")] 

Ref: Int or Number DataType for DataAnnotation validation attribute

+0

Vielen Dank für Ihre Antwort. Wenn ich die zweite Ihrer Ansätze versuche, bekomme ich die gleiche Fehlermeldung wie zuvor ("" Konnte Zeichenfolge nicht in Ganzzahl konvertieren: x. Pfad 'Id', Zeile 1, Position 9. "). Ich bin mir nicht sicher, ob die erste Option ist für mich anwendbar. Ich habe eigentlich keine Ansichten - nur Modelle und Controller. Die Controller reagieren auf Anfragen und geben JSON zurück. Wenn Sie den ersten vielleicht erweitern könnten, könnte ich das versuchen? Nochmals vielen Dank. – glaucon

+0

Wenn Sie nicht Wenn Sie keine Views haben, müssen Sie dies auf der Controller-Ebene überprüfen, da DataAnnotations-Ergebnisse in View gerendert werden. Sie können HttpResponse zurückgeben ... werfen Sie einen Blick auf http://stackoverflow.com/questions/12240713/put-content-in -httpresponsesemessage-Objekt – Sami