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