Je créerais que ce soit une méthode d'extension appliquée à List<user>
ou quel que soit votre userRepository.GetAll() retourne donc alors dans votre code, vous pouvez remplacer tous ces usages avec juste
ViewData["Users"] = userRepository.GetAll().ToSelectList();
Modifier exemple de code : Il y a 2 façons, vous pouvez le faire
public static List<SelectListItem> ToSelectList(this List<Agent> users)
{
List<SelectListItem> items = new List<int>();
foreach (var user in users)
{
var item = new SelectListItem { Text = user.FriendlyName,
Value = user.UserId.ToString() };
if (User.Identity.Name == user.UserName)
item.Selected = true;
items.Add(item);
}
return items;
}
et l'utilisation serait comme
userRepository.GetAll().ToSelectList();
Ou si vous avez des problèmes avec l'identité étant dans la méthode d'extension ont
public static List<SelectListItem> ToSelectList(this List<Agent> users,
string selectedUserName)
{
List<SelectListItem> items = new List<int>();
foreach (var user in users)
{
var item = new SelectListItem { Text = user.FriendlyName,
Value = user.UserId.ToString() };
if (user.UserName == selectedUserName)
item.Selected = true;
items.Add(item);
}
return items;
}
et l'utilisation serait comme
userRepository.GetAll().ToSelectList(User.Identity.Name);
Oui, j'ai cette approche sur d'autres situations similaires. Le problème? est que je dois définir l'utilisateur actuel comme l'élément sélectionné. Quelle serait la meilleure façon de résoudre cela? – alexn
User.Identity.Name est déjà statique, vous pouvez donc l'utiliser dans votre méthode d'extension. –
J'ajouterais probablement une vérification nulle à ce code puisque Identity pourrait ne pas exister à tout moment, disons pendant les tests unitaires, et s'il est appelé dans un scénario de test, il vaut mieux ignorer le bloc Selected = true que de lancer une exception . –