Html.DropDownListFor() - Comment mettre en défaut la valeur sélectionnée d'une vue fortement typée?

À l'aide de ASP.NET MVC 3, j'ai eu du mal à définir la valeur sélectionnée de la liste déroulante à l'aide de l'aide Html.DropDownListFor() de la fonction pour une vue fortement typée.

Le code pour les modèles ressemblent à ceci:

public class ResourceView
{
   ...
   public Language Language { get; set; }
}

public class Language
{
   public string DisplayName { get; private set; }      
   public string Code { get; private set; }    
   public override string ToString() {  return DisplayName;  }
}

et à l'intérieur de la vue:

@Html.DropDownListFor(model => model.Language, 
  new SelectList(ViewBag.AllPossibleLanguages, 
    "Code", "DisplayName", Model.Language.Code))

Il ya quelques solutions de contournement, comme l'utilisation de

@Html.DropDownList("LanguageCode", 
   new SelectList(ViewBag.PossibleLanguages,
      "Code", "DisplayName", Model.Language.Code))

et curieusement, le code ci-dessus ne travail si le premier paramètre est défini comme "la Langue", de même que le nom de la propriété dans le modèle.

Je peux aussi faire comme ceci

@Html.DropDownListFor(model => model.Language, 
  new SelectList(ViewBag.AllPossibleLanguages))

qui fonctionnera aussi bien avec la valeur sélectionnée, mais seulement les ToString() de la classe de Langue s'affiche et la langue de code que je veux dans les balises d'option ne sera pas réglé, ce qui n'est pas surprenant, il n'en est rien, identifier ce que le Code de champ doit être utilisé comme valeur de l'attribut.

J'arrive à résoudre ce à l'aide de jquery gestionnaire d'événement qui permet de sélectionner la valeur appropriée par la suite. Cependant, je suis curieux de savoir pourquoi cela ne fonctionne pas comme prévu, et tiens à le résoudre correctement si possible.

TL;DR: C'est le quatrième paramètre dans new SelectList(items, dataValueField, dataTextField, selectedValue)

OriginalL'auteur Can Gencer | 2011-04-09