2009-07-27 19 views
5

Sono sicuro che si tratta di un'operazione comune, ma ho difficoltà a capire come risolvere una soluzione. È il problema di due <select> in una pagina Web in cui l'una dipende dall'altra per l'elenco di valori possibili.Elenco di selezione vuoto in ASP.NET MVC

Ho un elenco a discesa contenente i codici di stato secondario in una pagina Web il cui elenco di valori possibili dipende dalla selezione in un altro elenco a discesa sulla pagina che contiene i codici di stato. Nel mio controller, richiamo l'elenco dei possibili codici di stato dal database e inserisco i valori in una SelectList che viene utilizzata da DropHownList HTMLHelper per creare la mia lista di selezione nella vista. Recupero un record di modello che contiene un codice di stato e utilizzo quel valore del codice di stato per cercare i possibili valori di sottoStatus nel database e inserisco quell'elenco in un'altra SelectList per il secondo elenco a discesa. La pagina effettua una chiamata ajax al server per ripopolare il menu a discesa dello stato secondario con un nuovo elenco di valori possibili quando l'utente modifica la selezione nel menu a discesa dello stato.

Un codice di stato vuoto non è un valore valido, ma si tratta di un'app di controllo qualità utilizzata per correggere tali problemi. Il mio problema è che il codice di stato corrente sul record del modello può essere a volte vuoto e quindi il mio elenco di valori di sottostati per il secondo menu a discesa sarà vuoto. Sfortunatamente non sembra esserci alcun modo per creare una SelectList vuota da passare al DropHownList HTMLHelper, ma il mio elenco a discesa deve essere creato quando la pagina viene caricata per supportare la mia soluzione ajax.

Qualcuno ha elaborato un modo efficiente e eccellente per gestire tali scenari? O devo ricorrere a qualcosa di brutto come controllare nella mia vista se lo stato secondario SelectList è nullo, e se sta usando HTML diverso per generare il menu a discesa? Sembra nella mia mente malata che essere in grado di generare una SelectList vuota da consegnare a HTMLHelper sarebbe una soluzione ragionevole. Sarei favorevole a qualsiasi idea.

risposta

3

È possibile passare una lista vuota a DropDownList.

Nel vostro controller, si dovrebbe avere qualcosa di simile:

 
var status_code_id = mymodel.status_code_id; 
var substatus_code_id = mymodel.substatus_code_id; 

ViewData["status_code_id"] = new SelectList(
    StatusCodes.FindAll(), "id", "code", status_code_id); 

ViewData["substatus_code_id"] = new SelectList(
    SubstatusCodes.FindAllForStatus(status_code_id), "id", "code", substatus_code_id); 

... dove FindAllForStatus contiene lo stesso codice che si sta utilizzando nella vostra chiamata AJAX per popolare il dropdownlist stato secondario. FindAllForStatus dovrebbe contenere un codice di stato vuoto e restituire una lista vuota.

Secondo lei, si dovrebbe avere qualcosa di simile:

 
<%= Html.DropDownList("status_code_id", "--not selected--")%> 
<%= Html.DropDownList("substatus_code_id", "--not selected--")%> 
-4

Restituire solo 1 elemento fittizio, lasciare il controllo javascript per questo elemento e quindi disabilitare il secondo elenco a discesa.

27

È possibile utilizzare Enumerable.Empty()

@Html.DropDownList("dropdown-name", Enumerable.Empty<SelectListItem>()) 
+1

anche lavorato con MultiSelectList aggiungendo Enumerable.Empty () come il param – garyh

Problemi correlati