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.

156voto

tvanfosson Points 268301

L'extension HtmlHelper DropDownList vous permet de définir une étiquette d'option qui s'affiche comme valeur initiale dans la sélection avec une valeur nulle. Il suffit d'utiliser l'une des signatures de DropDownList comportant l'étiquette d'option.

<%= Html.DropDownList( "DropDownValue",
                       (IEnumerable<SelectListItem>)ViewData["Menu"],
                        "-- Select One --" ) %>

3 votes

Et si vous insistez réellement sur la valeur de 0 ? Si la valeur est nulle/une chaîne vide, cela peut poser des problèmes de liaison de modèle.

2 votes

Si vous attendez un retour sous la forme d'un int, alors j'utiliserais int ? et je le laisserais nul si aucune sélection n'a été faite.

14 votes

Le problème avec cette solution est que vous perdez votre élément sélectionné.

88voto

davewilliams459 Points 618

J'ai réussi à le faire fonctionner en remplissant une SelectItemList, en la convertissant en une liste et en ajoutant une valeur à l'index 0.

List<SelectListItem> items = new SelectList(CurrentViewSetups, "SetupId", "SetupName", setupid).ToList(); 
items.Insert(0, (new SelectListItem { Text = "[None]", Value = "0" }));
ViewData["SetupsSelectList"] = items;

0 votes

Je recommande d'utiliser la surcharge optionLabel dans le HtmlHelper -> @Html.DropDownListFor

23voto

eaf Points 31

C'est possible.

//Create the select list item you want to add
SelectListItem selListItem = new SelectListItem() { Value = "null", Text = "Select One" };

//Create a list of select list items - this will be returned as your select list
List<SelectListItem> newList = new List<SelectListItem>();

//Add select list item to list of selectlistitems
newList.Add(selListItem);

//Return the list of selectlistitems as a selectlist
return new SelectList(newList, "Value", "Text", null);

0 votes

Je recommande d'utiliser la surcharge optionLabel dans le HtmlHelper -> @Html.DropDownListFor

3 votes

Si vous commencez avec un SelectList qui contient déjà des éléments, comme dans le cas de OP, la ligne suivante est également nécessaire afin de préserver ces éléments : newList.AddRange(myOriginalSelectList) .

5voto

jvelez Points 641

Voici une aide html pour vous

public static SelectList IndividualNamesOrAll(this SelectList Object)
            {
                MedicalVarianceViewsDataContext LinqCtx = new MedicalVarianceViewsDataContext();
                var IndividualsListBoxRaw =
                              (
                               from x in LinqCtx.ViewIndividualsNames //not correct need individual view!
                               orderby x.FullName
                               select x
                              );
                List<SelectListItem> items = new SelectList
                                            (
                                                IndividualsListBoxRaw, "First_Hospital_Case_Nbr", "FullName"
                                            ).ToList();
                items.Insert(0, (new SelectListItem { Text = "All Individuals", Value = "0.0", Selected = true }));

                Object = new SelectList
                         (
                            items,"Value","Text"
                         );

                return Object;
            }

5voto

AshOoO Points 349
private SelectList AddFirstItem(SelectList list)
        {
            List<SelectListItem> _list = list.ToList();
            _list.Insert(0, new SelectListItem() { Value = "-1", Text = "This Is First Item" });
            return new SelectList((IEnumerable<SelectListItem>)_list, "Value", "Text");
        }

Cela devrait faire ce dont vous avez besoin, envoyez simplement votre liste de sélection et il retournera une liste de sélection avec un élément dans l'indice 0.

Vous pouvez saisir le texte, la valeur ou même l'index de l'élément que vous devez insérer.

0 votes

Que faire si j'ai des valeurs sélectionnées et que je veux les conserver ?

0 votes

Je recommande d'utiliser la surcharge optionLabel dans le HtmlHelper -> @Html.DropDownListFor

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