Comment afficher la valeur sélectionnée d'une selectlist au contrôleur à l'aide d'un modèle de vue?

Cette question a été posée dans différentes formes, mais aucune des réponses semblent correspondre à ma situation. Je suis simplement en train d'essayer de récupérer la valeur sélectionnée de la forme d'une liste déroulante dans mon contrôleur.

Voici mon code:

ViewModel.cs

public class ViewModel
{
  public ViewModel() {}
  public ViewModel(Contact contact, IEnumerable<State> states)
    {
      this.Contact = contact;
      this.States = new SelectList(states, "Id", "Name", contact.StateId);
    }
  public Contact Contact {get;set;}
  public SelectList States {get;set;}
}

Contrôleur.cs

[HttpPost]
public ActionResult Edit(ViewModel viewModel)
{
  _contactService.UpdateContact(viewModel.Contact);
  return RedirectToAction("Item", new {id = viewModel.Contact.Id});
}

Vue.cshtml

<button type="submit" onclick="javascript:document.update.submit()"><span>Update</span></button>//aesthic usage. 
@{using (Html.BeginForm("Edit", "Controller", FormMethod.Post, new { name = "update" }))
{
@Html.HiddenFor(m => m.Contact.Id)
@Html.LabelFor(m => m.Contact.Name, "Name:")
@Html.TextBoxFor(m => m.Contact.Name)
<label for="state">State:</label>
@Html.DropDownList("state", Model.States)
}
}

Tout fonctionne comme prévu, sauf que pas de valeurs de la dropdownlist sont passés dans ma posté viewModel pour le contrôleur. La page d'édition et de tous les domaines de la charge correctement. Les listes déroulantes lier correctement et ont leurs valeurs affichées correctement. Cependant, quand je post, je seulement obtenir un "Contact" objet transmis au contrôleur. Les "États" SelectList objet est null.

J'ai essayé une cartographie de l' "StateId" bien dans mon viewModel constructeur mais cela ne fonctionne pas non plus. Ce que je fais mal?

Grâce.

InformationsquelleAutor trevorc | 2011-02-09