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
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
.
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.
Vous auriez probablement pu utiliser celui ci-dessous. Pour transmettre des attributs de données, utilisez underscore_
comme new {@data_myname=value}
.
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.MvcHtmlString
Un élément de sélection HTML avec un sous-élément pour chaque élément de la liste.