2017-04-02 3 views
0

Ich bin neu in MVC. Ich habe eine Enumeration für UnitOfMeasure in meiner Ingredient Tabelle wie folgt definiert:Enum speichern fehlgeschlagen, Fehlermeldung nicht angezeigt

public enum UnitOfMeasure 
{ 
    oz=1, 
    lb=2, 
    ml=3, 
    liter=4, 
    gal=5 
} 

ich das entsprechende Feld definiert haben, wie folgt:

[Required] 
[Range(1, int.MaxValue, ErrorMessage = "Please make a selection")] 
public UnitOfMeasure? UnitOfMeasure { get; set; } 

„Bitte wählen“, je nach Wunsch, als die angezeigte Standardwert in der Ansicht, aber ich möchte, dass der Benutzer vor dem Speichern eine Auswahl treffen muss. Ich verwende EnumDropDownListFor wie folgt in der Ansicht.

@Html.EnumDropDownListFor(model => model.UnitOfMeasure, 
           "--Please select--", 
           new { @class = "form-control" }) 

Zwei Probleme. Erstens erscheint die Fehlermeldung nicht, wenn der Benutzer keine Auswahl trifft, und zweitens kann ich keine Auswahl speichern (anscheinend trifft keine Auswahl auf das Bereichskriterium zu). Was mache ich falsch?

+2

Entfernen Sie das '[Range (1, int.MaxValue, ErrorMessage =" Bitte treffen Sie eine Auswahl ")]' Attribut. Alles, was benötigt wird, ist Ihr '[Required]' Attribut (und fügen Sie die 'ErrorMessage' in diesem Attribut hinzu. Und haben Sie' @ValidationMessageFor (m => m.UnitOfMeasure) 'eingeschlossen, um die Nachricht anzuzeigen? –

+0

Das hat es behoben Danke Stephen! –

Antwort

2

Wenn das Formular nicht übermittelt, aber keine Fehlermeldung angezeigt wird, bedeutet dies, dass Sie den Platzhalter für die Nachricht nicht eingefügt haben. Sie müssen

@Html.ValidationMessageFor(m => m.UnitOfMeasure) 

Das jquery.validate.unobtrusive.js Plugin parst die data-val-* Attribute im HTML durch Ihre EnumDropDownListFor() Verfahren erzeugt sind, und fügen Sie die Regeln zu jquery.validate.js, das Element, das vorbei, die für die Nachricht als Platzhalter fungiert. In Ihrem Fall gibt es keine, also kann nichts angezeigt werden, aber das Formular ist ungültig und wird nicht übermittelt.

Beachten Sie, dass das Attribut [Range] nicht erforderlich ist, da das Attribut [Required] bereits bedeutet, dass Sie einen der Werte enum auswählen müssen. Sie können einfach

verwenden
[Required(ErrorMessage = "Please make a selection")] 
public UnitOfMeasure? UnitOfMeasure { get; set; } 
+0

Vielen Dank! Ihre Antwort funktionierte wie ein Charme. –

Verwandte Themen