web-dev-qa-db-fra.com

Assistant HTML DropDownList expliqué

Quelqu'un peut-il s'il vous plaît expliquer comment cela fonctionne? (quelle surcharge est utilisée)

@Html.DropDownList("FinancialYearID", "Select FY")

FinancialYearID est un sac SelectList in view. Pourquoi est-il passé sous forme de chaîne?

Aussi, comment puis-je ajouter des attributs personnalisés à l’élément d’entrée? Ajouter un 3ème paramètre 

new { @class = "foo" } 

ne fonctionne pas?

Est-il possible d'ajouter des attributs de données en utilisant les helpers par défaut?

Merci

17
den

Vous appelez ceci surcharge. Cela crée une liste déroulante avec le nom "FinancialYearID" (ce qui signifie que la valeur sélectionnée sera liée à un modèle ou à une propriété ViewBag appelée "FinancialYearID") et "Select FY" comme texte de sélection réservé (vide).

Si vous souhaitez ajouter une classe, vous avez besoin de l’aide DropDown(string, IEnumerable, string, object):

@Html.DropDownList("FinancialYearID", null, "Select FY", new { @class = "foo" })

Ici, vous pouvez également renseigner la liste DropDownList en passant une IEnumerable (telle qu'une SelectList) où j'ai passé null.

Oui, il est tout à fait possible de passer un attribut de données. il suffit de remplacer le trait d'union par un trait de soulignement:

@Html.DropDownListFor("FinancialYearID", null,
                   "Select FY", new { @data_something = "foo" })

Si vous essayez de lier la valeur sélectionnée à une propriété de modèle, vous pouvez passer une expression lamba pour indiquer la propriété que vous souhaitez lier. Le framework générera la variable name appropriée:

@Html.DropDownList(m => m.FinancialYearID, MySelectList,
                   "Select FY", new { @data_something = "foo" })

De manière générale, je conseillerais également de mettre SelectList dans le modèle dans la requête GET initiale plutôt que d'utiliser ViewBag.

29
Ant P

Dans votre exemple, vous utilisez DropDownList(this HtmlHelper htmlHelper, string name, string optionLabel)

Pour obtenir l’effet souhaité, vous devez utiliser le code suivant:

@Html.DropDownListFor(model => model.FinancialYearID, (SelectList)ViewBag.FinancialYearID, "Select FY", new { @class = "foo" }) 

(la surcharge est DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel>, Expression<Func<TModel,TProperty>>, IEnumerable<SelectListItem>, string, object))

ou, si l'un de vos SelectList marqué comme sélectionné, utilisez le code suivant:

@Html.DropDownListFor(model => model.FinancialYearID, (SelectList)ViewBag.FinancialYearID, new { @class = "foo" }) 

(la surcharge est DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel>, Expression<Func<TModel,TProperty>>, IEnumerable<SelectListItem>, object))

P.S . N'oubliez pas de convertir votre élément ViewBag en SelectList, car le compilateur penserait que le second paramètre est un objet.

2
Evgeny Levin

Vous auriez probablement pu utiliser celui ci-dessous. Pour transmettre des attributs de données, utilisez underscore_ comme new {@data_myname=value}.

MSDN

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

Paramètres

htmlHelper

Tapez: System.Web.Mvc.HtmlHelper L'instance d'assistance HTML que cette méthode étend.

prénom

Tapez: System.String Le nom du champ de formulaire à renvoyer.

selectList

Tapez: System.Collections.Generic.IEnumerable<SelectListItem> Collection d'objets SelectListItem utilisés pour remplir la liste déroulante.

htmlAttributes

Tapez: System.Object Un objet contenant les attributs HTML à définir pour l'élément.

Valeur de retour

Tapez: System.Web.Mvc.MvcHtmlStringUn élément de sélection HTML avec un sous-élément pour chaque élément de la liste.

1
Murali Murugesan