asp.net mvc 3 pré-seleciona Html.DropDownListFor não funciona no jantar nerd

Aprendendo sobre listas suspensas, estou tentando adicionar uma página de criação de RSVP para o nerddinner, como emBlog de Scott Gu com um Html.DropDownListPara listar jantares disponíveis.

Posso obter a lista suspensa preenchida, mas não posso selecioná-la para pré-selecionar o valor ("Sample Dinner 2") que eu quero. Estou usando um iniciador para propagar alguns objetos de jantar no banco de dados. O banco de dados é sql ce 4 usando uma EF 'primeira abordagem de código'. Desculpe, sei que este é um problema comum e odeio perguntar, mas sinceramente gastei algum tempo nisso, mas não consigo fazê-lo funcionar:

ViewModel

public class RSVPViewModel
{
    public SelectList DinnersList { get; set; }
    public RSVP Rsvp { get; set; }
    public string SelectedItem { get; set; }
}

Controlador

    //
    //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);
    }

Visão

@Html.DropDownListFor(model => model.Rsvp.DinnerID, Model.DinnersList)

Resultado 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>

Portanto, não está pré-selecionando a lista suspensa com o valor "Jantar de amostra 2" quando a página é carregada. A lista exibe ok e define o DinnerID correto quando eu faço uma seleção e clico em Enviar.

Tenta isso também:

@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)

mas não define nem vincula ao Rsvp.DinnerID.

Isso pré-seleciona da lista, mas não liga (ou define Rsvp.DinnerID)

@Html.DropDownList("DinnersList")

Eu quero mantê-lo mvc3, então quero implementar com tipo forte usando a abordagem ViewModel (sem ViewData) e preferencialmente usando Html.DropDownListFor (não Html.DropDownList) .Viewbag parece desnecessário para este caso.

Obrigado!

Edit1

Pensando que eu deveria estar usando um selectList de selectListItems, tentei esta abordagem detalhada:

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 };

No entanto ainda não funciona. Devo usar a propriedade ViewModel SelectedItem em: @ Html.DropDownListFor .. de alguma forma? Algo como :

@Html.DropDownListFor(x => x.SelectedItem, Model.DinnersList)
<,/pre>

but how to I get a selected value to set Rsvp.DinnerID. I think thats called binding.

questionAnswers(5)

yourAnswerToTheQuestion