Informazioni sugli elenchi a discesa, Sto cercando di aggiungere un RSVP per creare una pagina per nerddinner come in Scott Gu's blog con un Html.DropDownListPer elencare le cene disponibili.asp.net mvc 3 preselezione Html.DropDownListPer non lavorare nella cena per nerd
Posso ottenere l'elenco a discesa popolato ma non riesco a ottenere il menu a discesa per selezionare il valore ("Sample Dinner 2") che desidero. Sto usando un iniziatore per seminare alcuni oggetti per la cena nel db. Il database è in sql ce 4 che utilizza un "primo approccio al codice" EF. Mi dispiace che questo è av problema comune e odio a chiedere, ma onestamente ho passato un bel po 'di tempo su questo, ma non posso farlo funzionare:
ViewModel
public class RSVPViewModel
{
public SelectList DinnersList { get; set; }
public RSVP Rsvp { get; set; }
public string SelectedItem { get; set; }
}
controller
//
//GET: /RSVP/Create
public ActionResult Create()
{
RSVP rsvp = new RSVP();
string selected = "Sample Dinner 2";
var typeList = new SelectList(dbc.Dinners.ToList(), "DinnerID", "Title", selected);
var viewModel = new RSVPViewModel { DinnersList = typeList, Rsvp = rsvp, SelectedItem = selected };
return View("Create", viewModel);
}
View
@Html.DropDownListFor(model => model.Rsvp.DinnerID, Model.DinnersList)
Risultato HTML
<select data-val="true" data-val-number="The field DinnerID must be a number." data-val-required="The DinnerID field is required." id="Rsvp_DinnerID" name="Rsvp.DinnerID">
<option value="1">Sample Dinner 1</option>
<option value="2">Sample Dinner 2</option>
</select>
Quindi non è la preselezione DropDownList con il valore "Sample Dinner 2" al caricamento della pagina. L'elenco viene visualizzato correttamente e imposta il DinnerID corretto quando effettuo una selezione e fai clic su Invia.
Tentativi questo anche:
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)
ma pretende molto impostati o legarsi a Rsvp.DinnerID.
Questa preseleziona dalla lista, ma pretende molto bind (o impostare Rsvp.DinnerID)
@Html.DropDownList("DinnersList")
voglio tenerlo MVC3 così vuole implementare con il tipo di forte utilizzando approccio ViewModel (senza Viewdata) e preferibilmente utilizzando Html .DropDownListFor (non Html.DropDownList) .Viewbag non sembra necessario per questo caso.
Grazie!
Edit1
Pensare dovrei usare un SelectList di selectListItems ho provato questo approccio verbose:
RSVP rsvp = new RSVP();
string selected = "2";
List<SelectListItem> dinners = new List<SelectListItem>();
foreach (Dinner dinner in dbc.Dinners.ToList())
{
SelectListItem slDinner = new SelectListItem();
slDinner.Value = dinner.DinnerID.ToString();
slDinner.Text = dinner.Title;
slDinner.Selected = (slDinner.Value == selected);
dinners.Add(slDinner);
}
var dinnersList = new SelectList(dinners, "Value", "Text", selected);
var viewModel = new RSVPViewModel { DinnersList = dinnersList, Rsvp = rsvp, SelectedItem = selected };
Tuttavia ancora nessun lavoro. Dovrei usare la proprietà ViewModel SelectedItem in: @ Html.DropDownListFor .. in qualche modo? Qualcosa di simile:
@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)
ma come ottenere un valore selezionato per impostare Rsvp.DinnerID. Penso che questo sia chiamato vincolante.
Quando si passa tramite il codice, fa la lista prodotta da 'nuova SelectList (...)' hanno un oggetto la cui proprietà Selected è vera? – StriplingWarrior
Non sono sicuro di cosa intendi. Non sto usando SelectListItems nella selectlist in modo da non vedere la proprietà selezionata? Ho anche letto altrove (http://stackoverflow.com/questions/2410543/dropdownlist-setting-selected-item-in-asp-net-mvc) che la proprietà Selected viene ignorata nella maggior parte dei casi (forse potrebbe funzionare per @ html.dropdownlist ("Lista cena"), ma non ha alcun legame? – Jay
Posso vedere una proprietà 'SelectedValue' in typeList il cui valore è 2 e il tipo è int dopo aver modificato la risposta in basso. – Jay