Ho un modello chiamato Situation
e sto semplicemente recuperandoli tutti in modo da poterli elencare in una finestra a cascata in una vista. Ecco la mia domanda:
var situations = _context.Situations.ToList();
Casella a discesa:
@Html.DropDownList("SituationID", null, "Pick One: ", new { @class = "form-control" })
La parte strana è che ciascuno degli elementi nel set restituito è il mio Namespace.Models.Situation
invece dei valori al livello più alto.
La mia altra query per restituire gli utenti ( public class ApplicationUser : IdentityUser
) restituisce i loro indirizzi e-mail per [0], 1 ... quindi le proprietà sotto di loro. Ecco gli screenshot in un punto di interruzione:
A parte il fatto che ho ancora pochissime conoscenze su come usare @ Html.DropDownList HtmlHelper (più su questo in altre domande), non riesco a capire cosa c'è di diverso tra i due. Non ci sono errori chiaramente, ma non ho idea di dove andare da qui. Grazie!
Penso che sia necessario trasformare l'elenco degli elementi Situation
in un elenco di SelectListItem
. Dovrebbe essere qualcosa come:
ViewBag.Situations = _context.Situations
.Select(situation => new SelectListItem { Text = situation.XXX, Value = situation.YYY })
.ToList();
E poi nella tua vista:
@Html.DropDownList("SituationID", ViewBag.Situations, "Pick One: ", new { @class = "form-control" })
Dove XXX
e YYY
sono le proprietà che si desidera utilizzare come testo di visualizzazione dell'articolo e l'ID dell'articolo (rispettivamente).
Puoi anche dare un'occhiata a Usare l'helper DropDownList con ASP.NET MVC per un esempio completo.
Spero che sia d'aiuto!
questo non è Ef Problem. questo è colpa tua nel rendering di DropDownList. È necessario modificare lo schema dei dati in una struttura dati corretta, ad esempio Dictionary o Classe Value-Text (SelectList). e quindi legalo al tuo DropDown.
questo è un esempio di codice per il tuo problema:
ViewBag.SituationList = _context.Situations.Select( x=> new SelectListItem{Value= x.Id, , Text= x.SituationName}).ToList();
e quindi collegalo al Dropdown utilizzando questo codice:
@Html.DropDownListFor(model => model.label, (SelectList)ViewBag.SituationList)