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

Popular posts from this blog

java - SNMP4J General Variable Binding Error -

sql server - python to mssql encoding problem -

windows - Python Service Installation - "Could not find PythonClass entry" -