2011-01-12 11 views
17

Il modello di vista personale definisce la proprietà che deve essere visualizzata come casella combinata. definizione di proprietà è:Convalida della selezione richiesta in DropDownList

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

sto usando DropDownListFor per rendere casella combinata:

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

Model.Processors contiene IEnumerable<SelectListItem> con una voce speciale definito come:

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

Ora ho bisogno di aggiungere validazione alla mia casella combinata in modo che l'utente debba selezionare un valore diverso da 'noSelection'. Speravo in qualche configurazione di RequiredAttribute ma non ha l'impostazione del valore di default.

+0

Se l'utente non dovrebbe selezionare il "NOSELECTION" perché l'avete aggiunto alla lista delle opzioni? – Clicktricity

+5

Per costringerlo a fare una selezione. –

+2

Se si desidera uno spazio vuoto come opzione iniziale, utilizzare l'overload di Html.DropDownListFor che accetta una stringa come valore prompt: Html.DropDownListFor (r => r.Processor, Model.Processors, Model.Processor, String.Empty) quindi la validazione richiesta dovrebbe funzionare – Clicktricity

risposta

25

ne dite di questo:

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

E poi:

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

E nella vostra azione POST

[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 
    } 
    ... 
} 

E ora non è più necessario aggiungere manualmente la voce noSelection. Basta usare il corretto sovraccarico DropDownListFor.

+1

Nice, ho completamente frainteso quel sovraccarico. Grazie. –

+5

Questo non vale per lato client :( –

+0

Questo funziona per me ... perfetto Quindi, invece di aggiungere il valore predefinito direttamente al modello, lo si aggiunge direttamente tramite il sovraccarico. – Legends

Problemi correlati