web-dev-qa-db-fra.com

mvc 5 SelectList de la table avec une valeur vide pour DropDownList

J'utilise le code ci-dessous pour créer un menu déroulant

Manette

ViewBag.Id= new SelectList(db.TableName.OrderBy(x => x.Name),"Id","Name")

Vue

 @Html.DropDownList("Id", null, htmlAttributes: new { @class = "form-control" })

Ma question est la suivante: comment puis-je modifier SelectList pour ajouter un élément vierge afin qu’un élément vide soit automatiquement ajouté pour DropDownList.

Merci.

19
ary

Utilisez l’une des surcharges qui accepte une optionLabel

@Html.DropDownListFor(m => m.ID, (SelectList)ViewBag.MyList, "Please select", new { @class = "form-control" })

ou si vous ne voulez pas utiliser les méthodes fortement typées

@Html.DropDownList("ID", (SelectList)ViewBag.MyList, "Please select", new { @class = "form-control" })

Qui ajoutera la première option avec le texte spécifié dans le 3ème paramètre et avec une valeur null

<option value="">Please Select</option>
35
user3559349

Vous pouvez utiliser cette surcharge: 

public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string optionLabel, object htmlAttributes);

optionLabel est le texte d'un élément vide par défaut.

2
romanoza

Dans mon projet, ces travaux:

Manette

ViewBag.TagHfoFlagId= new SelectList(db.TableName.OrderBy(x => x.Name),"Id","Name")

Vue

 @Html.DropDownList("TagHfoFlagId", null,"--Select Name--", htmlAttributes: new { @id = "tags" })
1
user1575120

La réponse acceptée fonctionne, mais elle affiche la valeur par défaut (null) dans la liste déroulante de la vue, même si vous en avez déjà sélectionné une auparavant. Si vous souhaitez que la valeur déjà sélectionnée soit affichée dans la liste déroulante une fois que vous avez rendu la vue, utilisez plutôt ceci:

Manette

ViewBag.Fk_Id_Parent_Table = new SelectList(db.Parent_Table, "Id", "Name", Child_Table.Fk_Id_Parent_Table);
return View(ChildTable);

Vue

@Html.DropDownList(
             "Fk_Id_Parent_Table",
             null, 
             "Not Assigned", 
             htmlAttributes: new { @class = "form-control" }
                  )
0
Antoine Pelletier