Ce modèle est un peu réduit, mais il ressemble essentiellement à ce qui suit :
public class PersonCreateEditViewModel
{
public string Title { get; set; }
public IEnumerable<SelectListItem> Titles { get; set; }
}
et sur ma page d'édition, je veux afficher le titre actuel de la personne dans une liste déroulante afin que nous puissions modifier son titre. Ce code ressemble à ceci :
@Html.DropDownListFor(model => model.Title, new SelectList(Model.Titles, "Value", "Text", Model.Title))
et je l'alimente dans mon action comme suit en récupérant un ensemble de chaînes :
IEnumerable<SelectList> titles = somelistoftitles.Select(
c => new SelectListItem
{
Value = c,
Text = c
};
var viewModel = new PersonCreateEditViewModel()
{
Title = model.Title,
Titles = sometitles
};
return View(viewModel);
et cela remplit la liste déroulante avec les valeurs mais ne sélectionne pas le titre actuel de la personne. Il est donc évident que je fais quelque chose de mal. En regardant le code html sous-jacent, je vois que le code selected
n'est pas défini pour l'option correspondant au titre de la personne. I pensée que le fait de spécifier Model.Title
comme le sélectionnerait le troisième argument.
Des idées ?
Mise à jour
J'ai ajouté le réglage du Selected
comme qntmfred l'a suggéré ci-dessous, et cela mettra la bonne dans la liste à true mais la propriété <option>
n'a pas le selected
sur cet attribut.
SOLVÉ
C'était donc subtil. Il se trouve que j'avais un ViewBag
nommée "Titre" - quelque chose comme ceci :
@{
ViewBag.Title = "Edit Person"
}
et cela a manifestement empêché la sélection de fonctionner puisque mon modèle possède également une propriété "Title". J'ai résolu le problème en renommant la propriété.