2011-01-12 2 views
17

Mein Ansichtsmodell definiert die Eigenschaft, die als Kombinationsfeld angezeigt werden soll. Objektdefinition ist:Validieren der erforderlichen Auswahl in DropDownList

[Required] 
public int Processor { get; set; } 

ich DropDownListFor bin mit Kombinationsfeld zu machen:

<%=Html.DropDownListFor(r => r.Processor, Model.Processors, Model.Processor)%> 

Model.Processors enthält IEnumerable<SelectListItem> mit einem Sondereffekt wie folgt definiert:

var noSelection = new SelectListItem 
    { 
    Text = String.Empty, 
    Value = "0" 
    }; 

Jetzt muss ich hinzufügen Validierung zu meinem Kombinationsfeld, so dass der Benutzer einen anderen Wert als 'noSelection' auswählen muss. Ich habe auf eine Konfiguration von RequiredAttribute gehofft, aber es hat keine Standardeinstellung.

+0

Wenn der Benutzer nicht soll die „NOSELECTION“ wählen, warum Sie es in die Liste der Optionen hinzugefügt haben? – Clicktricity

+5

Um ihn zu zwingen, eine Auswahl zu treffen. –

+2

Wenn Sie nur ein Leerzeichen als erste Option verwenden möchten, verwenden Sie die Überladung von Html.DropDownListFor, die eine Zeichenfolge als Eingabeaufforderungswert verwendet: Html.DropDownListFor (r => r.Processor, Model.Processors, Model.Processor, String.Empty) dann sollte die erforderliche Validierung funktionieren – Clicktricity

Antwort

25

Wie wäre es damit:

[Required] 
public int? Processor { get; set; } 

Und dann:

<%= Html.DropDownListFor(
    x => x.Processor, Model.Processors, "-- select processor --" 
) %> 

Und in Ihrer POST Aktion

[HttpPost] 
public ActionResult Index(MyViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // the model is valid => you can safely use model.Processor.Value here: 
     int processor = model.Processor.Value; 
     // TODO: do something with this value 
    } 
    ... 
} 

Und jetzt nicht mehr manuell die noSelection Element hinzufügen müssen. Verwenden Sie einfach die richtige DropDownListFor Überladung.

+1

Schön, ich habe diese Überlastung völlig falsch verstanden. Vielen Dank. –

+5

Dies wird nicht auf Client-Seite validiert :( –

+0

Das funktioniert für mich ... perfekt. Also, anstatt den Standardwert direkt auf das Modell hinzuzufügen, fügen Sie es direkt über die Überladung. – Legends

Verwandte Themen