asp.net mvc 3 pre-select Html.DropDownListFor not working in nerd dinner -
learning dropdown lists, im trying add rsvp create page nerddinner in scott gu's blog html.dropdownlistfor listing available dinners.
i can dropdown list populated cannot dropdown pre select value ("sample dinner 2") want. im using initilizer seed few dinner objects in db. database sql ce 4 using ef 'code first approach'. sorry know v common problem , hate ask, have spent quite time on cant work:
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)
html result
<select data-val="true" data-val-number="the field dinnerid must number." data-val-required="the dinnerid field required." id="rsvp_dinnerid" name="rsvp.dinnerid"> <option value="1">sample dinner 1</option> <option value="2">sample dinner 2</option> </select>
so not preselecting dropdownlist value "sample dinner 2" when page loads. list displays ok , sets correct dinnerid when make selection , click submit.
tries also:
@html.dropdownlistfor(x => x.selecteditem, model.dinnerslist)
but doesnt set or bind rsvp.dinnerid.
this preselects list doesnt bind (or set rsvp.dinnerid)
@html.dropdownlist("dinnerslist")
i want keep mvc3 want implement strong type using viewmodel approach (no viewdata) , preferably using html.dropdownlistfor (not html.dropdownlist).viewbag seems unnecessary case.
thanks!
edit1
thinking should using selectlist of selectlistitems tried verbose approach :
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 };
however still no work. should making use of viewmodel selecteditem property in: @html.dropdownlistfor.. somehow? :
@html.dropdownlistfor(x => x.selecteditem, model.dinnerslist)
but how selected value set rsvp.dinnerid. think thats called binding.
after reading here , here, understand how htmldropdownlistfor automatically selects correct item in dropdown based on model - selecting dinnerid in rsvp (foreign key dinner.dinnerid) cause dropdown containing list of dinner.dinnerids pre select value. no need yet think selectedvalue in selectlist or viewmodel.
solution:
// //get: /rsvp/create public actionresult create() { //automatically preselects matching dinnerid in dinner dropdownlist var rsvp = new rsvp {dinnerid = 2 }; var typelist = new selectlist(dbc.dinners.tolist(), "dinnerid", "title"); var viewmodel = new rsvpviewmodel { dinnerslist = typelist, rsvp = rsvp}; return view("create", viewmodel); }
Comments
Post a Comment