web-dev-qa-db-fra.com

Comment écrire un simple Html.DropDownListFor ()?

Dans ASP.NET MVC 2, j'aimerais écrire une liste déroulante très simple qui donne des options statiques. Par exemple, j'aimerais proposer des choix entre "Rouge", "Bleu" et "Vert".

127
Rinesse

Voir cet article MSDN et un exemple d'utilisation ici sur Stack Overflow .

Disons que vous avez la classe Linq/POCO suivante:

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
}

Et disons que vous avez le modèle suivant:

public class PageModel 
{
   public int MyColorId { get; set; }
}

Et enfin, disons que vous avez la liste de couleurs suivante. Ils pourraient provenir d’une requête Linq, d’une liste statique, etc .:

public static IEnumerable<Color> Colors = new List<Color> { 
    new Color {
        ColorId = 1,
        Name = "Red"
    },
    new Color {
        ColorId = 2,
        Name = "Blue"
    }
};

Dans votre vue, vous pouvez créer une liste déroulante comme ceci:

<%= Html.DropDownListFor(n => n.MyColorId, 
                         new SelectList(Colors, "ColorId", "Name")) %>
180
Evan Nagle
<%: 
     Html.DropDownListFor(
           model => model.Color, 
           new SelectList(
                  new List<Object>{ 
                       new { value = 0 , text = "Red"  },
                       new { value = 1 , text = "Blue" },
                       new { value = 2 , text = "Green"}
                    },
                  "value",
                  "text",
                   Model.Color
           )
        )
%>

ou vous ne pouvez écrire aucune classe, mettez quelque chose comme ceci directement dans la vue.

61
Berat

Evitez beaucoup de gros doigtés en commençant par un dictionnaire dans le modèle

namespace EzPL8.Models
{
    public class MyEggs
    {
        public Dictionary<int, string> Egg { get; set; }

        public MyEggs()
        {
            Egg = new Dictionary<int, string>()
            {
                { 0, "No Preference"},
                { 1, "I hate eggs"},
                { 2, "Over Easy"},
                { 3, "Sunny Side Up"},
                { 4, "Scrambled"},
                { 5, "Hard Boiled"},
                { 6, "Eggs Benedict"}
            };

    }


    }

Dans la vue, convertissez-le en liste pour affichage.

@Html.DropDownListFor(m => m.Egg.Keys,
                         new SelectList(
                             Model.Egg, 
                             "Key", 
                             "Value"))
34
Jules Bartow

Bonjour, voici comment je l'ai fait dans un projet:

     @Html.DropDownListFor(model => model.MyOption,                
                  new List<SelectListItem> { 
                       new SelectListItem { Value = "0" , Text = "Option A" },
                       new SelectListItem { Value = "1" , Text = "Option B" },
                       new SelectListItem { Value = "2" , Text = "Option C" }
                    },
                  new { @class="myselect"})

J'espère que ça aide quelqu'un. Merci

31
Master Programmer

Ou si c'est à partir d'un contexte de base de données, vous pouvez utiliser

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }))
12
Joel Wahlund

Avec "Veuillez sélectionner un élément"

@Html.DropDownListFor(model => model.ContentManagement_Send_Section,
  new List<SelectListItem> { new SelectListItem { Value = "0", Text = "Plese Select one Item" } }
    .Concat(db.NameOfPaperSections.Select(x => new SelectListItem { Text = x.NameOfPaperSection, Value = x.PaperSectionID.ToString() })),
  new { @class = "myselect" })  

Dérivé des codes: Programmeur principal && Joel Wahlund ;
King Référence: https://stackoverflow.com/a/1528193/1395101 JaredPar ;

Merci Programmeur principal && Joel Wahlund && JaredPar ;

amis de bonne chance.

5
Amin Ghaderi
@using (Html.BeginForm()) {
    <p>Do you like pizza?
        @Html.DropDownListFor(x => x.likesPizza, new[] {
            new SelectListItem() {Text = "Yes", Value = bool.TrueString},
            new SelectListItem() {Text = "No", Value = bool.FalseString}
        }, "Choose an option") 
    </p>
    <input type = "submit" value = "Submit my answer" />
} 

Je pense que cette réponse est similaire à celle de Berat, en ce sens que vous avez mis tout le code de votre liste déroulante directement dans la vue. Mais je pense que c'est un moyen efficace de créer une liste déroulante y/n (booléen), donc je voulais la partager.

Quelques notes pour les débutants:

  • Ne vous inquiétez pas de l'appellation "x" - elle est créée ici pour la première fois et ne crée pas de lien vers quoi que ce soit d'autre dans l'application MVC. Vous pouvez donc l'appeler comme vous voulez - "x", 'modèle', 'm' etc.
  • L'espace réservé que les utilisateurs verront dans la liste déroulante est "Choisissez une option". Vous pouvez donc le modifier si vous le souhaitez.
  • Il y a un peu de texte précédant la liste déroulante qui dit "Tu aimes la pizza?"
  • Cela devrait être le texte complet pour un formulaire, y compris un bouton de soumission, je pense

J'espère que ça aide quelqu'un,

1
user5138047