4 votes

SelectList n'affiche pas l'élément sélectionné

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é.

4voto

itsmatt Points 18905

SOLVÉ

Comme je l'ai écrit à la fin de ma question, ce n'était pas évident. Il se trouve que j'ai 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é.

Beaucoup trop de temps a été perdu sur ce problème ce matin.

Leçon apprise.

1voto

qntmfred Points 10246

Vous devez définir le Selected sur votre SelectListItem

IEnumerable<SelectList> titles = somelistoftitles.Select(
      c => new SelectListItem
      {
         Value = c,
         Text = c,
         Selected = (c.Equals(model.Title))
      };

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X