2010-03-13 1 views
7

mein Objekt hat Feld mit Datentyp Int. wenn ich html-formular in diesen textkasten lege nicht nummer der validator sage-Das feld muss eine nummer sein. wie diese, wie kann ich diese NachrichtenÄnderung Validierung Nachricht in Daten Annotation

[Required(ErrorMessage = "Введите название")] 
    [DisplayName("Название")] 
    public int age { get; set; } 
+0

Gibt es einen Grund, warum diese Frage abgelehnt wurde? Bitte hinterlassen Sie einen Kommentar, wenn Sie eine Frage ablehnen. IMHO ist es eine gute Frage. –

+0

Nicht jeder versteht Russisch. Der Text des Attributs sollte in Englisch sein. –

Antwort

4

ändern habe ich eine sauber Art und Weise, dies zu erreichen mit Hilfe von Data Annotations nicht gefunden. Ein Weg wäre, ein benutzerdefiniertes Modellbinder zu schreiben, aber das scheint eine Menge Arbeit für solch eine einfache Aufgabe zu sein.

Eine andere Möglichkeit, dies zu erreichen, ist das Hinzufügen eines Ordners App_GlobalResources zu Ihrer ASP.NET-Anwendung. Fügen Sie eine Ressourcendatei namens Messages.resx hinzu, die eine PropertyValueRequired String-Ressource enthält.

PropertyValueRequired = "Some custom error message" 

In Ihrem Application_Start registrieren die Ressourcenklasse Schlüssel:

protected void Application_Start() 
{ 
    RegisterRoutes(RouteTable.Routes); 
    DefaultModelBinder.ResourceClassKey = "Messages"; 
} 

Beachten Sie, dass ASP.NET MVC 2 verwendet die PropertyValueInvalid statt PropertyValueRequired Ressourcenschlüssel.

IMO mit Data Annotations zur Validierung Logik ist begrenzt (vielleicht in .NET 4 wird dies ändern). Wenn Sie die vollständige Kontrolle über die Validierungslogik haben möchten, würde ich Ihnen die Verwendung einer Validierungsbibliothek wie Fluent Validation oder xVal empfehlen.

+0

Ich hatte genau das gleiche Problem. Ich habe auch von Datenanmerkungen zu Fluent Validation gewechselt. Ich finde fließende Validierung wirklich nützlich und einfach anzupassen. –

+0

Gründe, warum Sie die Fluentvalidierung empfehlen? Ist es besser als der Anwendungsblock der Enterprise Library Validation? BTW, xVal ist derzeit veraltet. –

+0

Ich empfehle FV, weil es leicht ist, komplexe Validierungsregeln auf elegante Weise ausdrücken kann, es bietet eine API zum einfachen Testen dieser Validierungsregeln und hat eine großartige Integration mit ASP.NET MVC. –

2

Ich stieß auf das gleiche Problem und arbeitete um ihn herum, indem ich eine RegularExpression spezifizierte, die nur positive natürliche Zahlen erlaubt.

[Required(ErrorMessage = "Введите название")] 
[DisplayName("Название")] 
[RegularExpression(@"^[0-9]+$", ErrorMessage = "Поле возраст не является числом")] 
public int age { get; set; } 

Nicht sicher, ob es irgendwelche Rückschläge zu dieser Lösung gibt. Es scheint mir gut zu gehen.

PS: Wenn Sie führende Nullen nicht zulassen möchten, verwenden Sie "^[1-9]+[0-9]*$".

Im Rückblick: Ich muss zugeben, obwohl es ein bisschen komisch ist, einen regulären Ausdruck zu einer ganzen Zahl hinzuzufügen.