118 votes

Comment ajouter un élément à une liste de sélection en ASP.net MVC ?

En fait, je cherche à insérer un élément au début d'une liste de sélection avec la valeur par défaut de 0 et la valeur de texte de " -- Select One --".

Quelque chose comme

SelectList list = new SelectList(repository.func.ToList());
ListItem li = new ListItem(value, value);
list.items.add(li);

Cela peut-il être fait ?

2 votes

SelectList semble n'être qu'une aide pour lier les données directement aux éléments. Si vous ajoutez des éléments manuellement, utilisez List<SelectListItem> à la place.

0 votes

Compte tenu de la réponse acceptée et du nombre de votes, puis-je vous suggérer de modifier légèrement la question pour refléter cette réponse, c'est-à-dire "Comment puis-je ajouter un élément de valeur vide à une SelectList en ASP.net MVC" ? Mais le crédit et les remerciements vont à @h-dog pour avoir répondu à la question originale "Comment puis-je ajouter un élément" en soi.

2voto

Exception Al Points 3432

Cela peut ne pas sembler très élégant, mais je fais habituellement quelque chose comme ça :

    var items = repository.func.ToList();
    items.Insert(0, new funcItem { ID = 0, TextValue = "[None]" });
    ViewBag.MyData = new SelectList(items);

1voto

Jeff Points 569

Ok, j'aime le code propre donc j'ai fait de cette méthode une extension.

static public class SelectListHelper
{
    static public SelectList Add(this SelectList list, string text, string value = "", ListPosition listPosition = ListPosition.First)
    {
        if (string.IsNullOrEmpty(value))
        {
            value = text;
        }
        var listItems = list.ToList();
        var lp = (int)listPosition;
        switch (lp)
        {
            case -1:
                lp = list.Count();
                break;
            case -2:
                lp = list.Count() / 2;
                break;
            case -3:
                var random = new Random();
                lp = random.Next(0, list.Count());
                break;
        }
        listItems.Insert(lp, new SelectListItem { Value = value, Text = text });
        list = new SelectList(listItems, "Value", "Text");
        return list;
    }

    public enum ListPosition
    {
        First = 0,
        Last = -1,
        Middle = -2,
        Random = -3
    }
}

Utilisation (par exemple) :

var model = new VmRoutePicker
    {
     Routes =
     new SelectList(_dataSource.Routes.Select(r => r.RouteID).Distinct())
     };                                     
  model.Routes = model.Routes.Add("All", "All", SelectListHelper.ListPosition.Random);
//or
  model.Routes = model.Routes.Add("All");

-5voto

New2this Points 1

Je ne sais pas si quelqu'un d'autre a une meilleure option...

<% if (Model.VariableName == "" || Model.VariableName== null) { %>
   <%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], "", 
        new{stlye=" "})%>
<% } else{ %>
<%= html.DropDpwnList("ListName", ((SelectList) ViewData["viewName"], 
        Model.VariableName, new{stlye=" "})%>
<% }>

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