2010-06-16 5 views

Répondre

162

Voir this MSDN article et example usage here on 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, à partir 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" 
    } 
}; 

À votre avis, vous pouvez créer une liste déroulante comme ceci:

<%= Html.DropDownListFor(n => n.MyColorId, 
         new SelectList(Colors, "ColorId", "Name")) %> 
+0

vraiment clair. Je voudrais savoir où devrais-je mettre le IEnumerable dans mon code? Je sais qu'il semble stupide comme question mais je suis très perdu et nouveau dedans: s – Rinesse

+5

Pas de soucis, mon ami. Je sais ce que ça fait.:) Comme vous l'avez suggéré dans votre question initiale, s'agit-il d'une liste statique que vous allez créer dans le code, ou allez-vous extraire cette liste d'une base de données? –

+0

une liste statique qui contient 4 options et non pas une base de données – Rinesse

51
<%: 
    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 pouvez N'écrivez aucune classe, mettez quelque chose comme ça directement dans la vue.

+0

Merci, c'était difficile de trouver une solution pour ... – ctorx

+2

Je reçois l'erreur ci-dessous lorsque vous essayez votre code: "Référence de l'objet non défini à une instance –

+9

mauvaise idée d'ajouter la logique du modèle à votre vue –

28

Évitez de beaucoup de doigtés de graisse 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 le convertir en une liste pour l'affichage

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

Salut voici comment je l'ai fait en 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 cela aide quelqu'un. Merci

8

Ou si elle est 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() })) 
+14

S'il vous plaît ne pas encourager ce genre de non-sens.Si vous aimez référencer votre contexte DB dans vos vues Razor qui est sur vous, mais pour ose de nous qui aiment construire le logiciel de la bonne manière alors c'est une idée terrible. Liez votre vue Razor à une classe de modèle de vue, toutes les données nécessaires pour la vue sont stockées dans une instance du modèle de vue créé par le contrôleur. Cela fait partie de la raison pour laquelle je m'éloigne de .Net, trop de développeurs terribles font des choses terribles avec leur code faisant d'énormes maux de tête pour tout le monde. Je parie que vous mettez toute votre logique commerciale dans vos contrôleurs! – JBeckton

+2

Tout d'abord, désolé pour toute incorrections de grammaire puisque l'anglais n'est pas ma langue maternelle. C'est toujours agréable de voir quelqu'un faire un tel commentaire, je vous félicite monsieur que vous avez pris le temps de contribuer. Il est aussi toujours rassurant que le métier de développeur soit entre de bonnes mains, puisque le mien ne le fera pas. Les goûts de votre commentaire ignorant est pourquoi je ne poste plus ici. Puis-je vous informer que lorsque j'ai écrit cela, j'avais 8 mois dans ma formation et n'avais jamais touché au développement Web à l'avance. Je voulais partager une approche différente avec le peu de connaissances que j'avais. –

+4

8 mois à? Alors pourquoi essayer de résoudre des problèmes quand vous ne pouviez pas savoir comment? Mon commentaire est loin d'être ignorant, je vois ce genre de choses jour après jour. Vous devez commencer à considérer la quantité de travail manuel que vous êtes obligé de vos collègues. Imaginez que vous ayez une application d'entreprise avec des centaines de vues et que votre responsable technique souhaite passer à Oracle DB. Imaginez le coût littéral de la refactorisation de tous les affichages et contrôleurs qui utilisent des listes déroulantes simplement à cause de votre ligne de code! Je n'essaie pas de vous insulter, essayant simplement de vous expliquer comment un mauvais conseil peut avoir des effets énormes. – JBeckton

4

Avec "S'il vous plaît 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: maître programmeur & & Joel Wahlund;
King Référence: https://stackoverflow.com/a/1528193/1395101JaredPar;

Merci maître programmeur & & Joel Wahlund & & JaredPar;

Bonne chance à vos amis.

Questions connexes