2009-05-21 5 views
15
public IEnumerable<SelectListItem> GetList(int? ID) 
{ 
     return from s in db.List 
      orderby s.Descript 
      select new SelectListItem 
      { 
       Text = s.Descript, 
       Value = s.ID.ToString(), 
       Selected = (s.ID == ID) 
      }; 
} 

Je renvoie ce qui précède à une vue et remplit un DropDownList. Je voudrais ajouter un défaut SelectListItem (0, "Please Select..") au résultat de LINQ ci-dessus avant de retourner à la vue. Est-ce possible?Ajout d'un élément SelectListItem par défaut

Répondre

29
return new[] { new SelectListItem { Text = ... } }.Concat(
     from s in db.List 
     orderby s.Descript 
     select new SelectListItem 
     { 
      Text = s.Descript, 
      Value = s.ID.ToString(), 
      Selected = (s.ID == ID) 
     }); 
4
var list = from s in db.List 
      orderby s.Descript 
      select new SelectListItem 
      { 
       Text = s.Descript, 
       Value = s.ID.ToString(), 
       Selected = (s.ID == ID) 
      }; 

list.Insert(0, new SelectListItem { Text = "Please Select...", Value = string.Empty }); 
return list; 
21

Comme vous utilisez ASP.NET MVC, vous pouvez le faire dans la vue en spécifiant une valeur pour le paramètre optionLabel de la méthode DropDownField du HtmlHelper - par exemple:

htmlHelper.DropDownList("customerId", selectList, "Select One"); 

Mettre ce type de code dans votre couche d'interface utilisateur est probablement plus approprié que d'avoir dans la couche de données. Un inconvénient de le faire est que votre boîte de sélection aura une valeur de chaîne vide, pas un « 0 » pour l'option « Select One », mais ce n'est pas vraiment un problème que vous pouvez traiter cela comme une valeur NULL si votre action contrôleur méthode peut accepter un int nullable pour le paramètre pertinent - par exemple

public ActionResult DoSomething(int? customerId) 
{ 
    if(customerId != null) 
    { 
    // do something with the value 
    } 
} 
+0

+1 a juste fait cela dans une vue; simple et ça marche :) – Dan

+0

C'était la réponse que je cherchais. –

0

Voici ce que j'ai fait, j'ai lu mes valeurs d'un fichier XML dans un IList. J'ai ensuite inséré un nouvel enregistrement dans le IList à la position 0. Ensuite, faites une liste de sélection de l'IList.

IList < my_data> mydata = (de tmp dans myXML.Descendants ("R"). ToList()

     select new MY_DATA 
         { 
         NR = tmp.Attribute("NR").Value, 
         NA = tmp.Attribute("NA").Value 
         }).ToList<MY_DATA>(); 

mydata.Insert (0, de nouvelles my_data() {NR = "" , NA = "--Cliquez à choisir--"});

SelectList myList = new SelectList (mydata, "NR", "NA");

0

FIRT mettre votre valeur par défaut dans la liste

list.add (votre élément de la liste par défaut)

puis effectuez list.addrange (LINQ requête de sélection)

acclamations

0

Après avoir passé en revue de nombreuses questions, et je ne trouve pas ce que je Je cherche. Je n'ai pas besoin de beaucoup de lignes de code pour avoir un simple drowpdown. donc je veux partager avec vous ce que je l'utilise et il est facile et simple .. (surtout si vous ne voulez pas utiliser et Entity Framework ..

utilisant System.Web.Mvc;

SelectList(IEnumerable items, string dataValueField, string dataTextField); 

Exemple:

dans Controller ajouter:

SelectList slTitle = new SelectList(Query.SelectAllTitle(), "TitleID", "TitleName"); 
ViewBag.TitleSelectList = slTitle; 

à Voir Ajouter:

@Html.DropDownList("TitleSelectList", "--please select--") 
0

Ceci est juste pour les personnes qui utilisent Webpages framwork (ne pas MVC et formulaire en ligne) avec Razor V2 et C#, vous devez faire

@Html.DropDownList("category", "Please select", listData) 

Note: OptionalLabel besoin d'être le paramètre milieu.

équivalent serait ajouter un SelectListItem à vos données de liste:

var list=db.Query("select id, name from dbtable"); 
    List<SelectListItem> listData = new List<SelectListItem>(); 
    listData.Add(new SelectListItem 
    { 
     Text = "Please select", 
     Value = "", 
    }); 

    foreach(var item in list) { 
     listData.Add(new SelectListItem { 
      Text = item.Name, 
      Value = item.id, 
      Selected = isSelected 
     }); 
    } 

    @Html.DropDownList("play" , listData) 
Questions connexes