Je suis un modèle défini comme IEnumerable<MyViewModel>
que j'ai essayé d'utiliser pour créer une liste de sélection (Html.SelectListFor
). Mais je ne pouvais pas comprendre comment le faire. Ce qui m'a fait regarder la méthode plaine Html.SelectList
.Faire face à des listes de sélection
Comme il veut un IEnumerable<SelectListITem>
et je ne veux pas ajouter vue logique spécifique dans mon contrôleur ou logique à mon avis, je fini par créer la méthode d'extension suivante:
public static class ExtensionMethods
{
public static IEnumerable<SelectListItem> ToSelectList<T>(this IEnumerable<T> items, Func<T, string> valueSelector, Func<T, string> textSelector)
{
return items.Select(item => new SelectListItem
{
Text = textSelector(item),
Value = valueSelector(item)
}).ToList();
}
}
qui me sert:
@Html.DropDownList("trainid", Model.ToSelectList(item => item.Id, item => item.Name));
Cela ne semble pas être la solution optimale. Comment aurais-je dû faire?
Cela semble être une très bonne solution générique pour construire des listes de sélection – hunter
Il fonctionne, mais il doit y avoir un moyen d'avancer plus droit de le faire avec MVC? Si non, quel est le but de 'Html.SelectListFor'? – jgauffin
"Je ne veux pas ajouter de logique spécifique à la vue dans mon contrôleur" - Attendez, n'est-ce pas la responsabilité principale du contrôleur? Assemble les données pour la vue? – jfar