Problème délicat ici. J'essaie de convertir des éléments d'une liste en IEnumerable<SelectListItem>
.
dynamicTextInDatabase
renvoie simplement toutes les énumérations utilisées dans ma base de données. Actuellement, ne renvoie que 1 et 2. La classe de données simple contient une valeur int.
dynamicTextEnumsInDatabase
est la même liste que ci-dessus, juste dans la classe qui stocke réellement mes Enums.
dynamicTextEnumsAll
est une liste de tous les Enums disponibles dans mon application. Actuellement: 1, 2 et 3.
dynamicTextEnumsAvaiable
est une liste de tous les énumérations inutilisées. Il combine tous les enums, puis supprime ceux qui figurent dans la liste de bases de données.
Je dois passer le dynamicTextEnumsAvaiable
à ma vue via le ViewBag pour l'afficher dans une liste déroulante. Cependant, cela doit être IEnumerable<SelectListItem>
plutôt que List
.
List<DynamicTextEnumData> dynamicTextInDatabase = new List<DynamicTextEnumData>();
List<DynamicTextEnum> dynamicTextEnumsInDatabase = new List<DynamicTextEnum>();
List<DynamicTextEnum> dynamicTextEnumsAll = new List<DynamicTextEnum>();
IEnumerable<SelectListItem> list;
using (var proxy = new Proxy<IDynamicText>())
{
dynamicTextInDatabase = proxy.Channel.DynamicTextGetActiveEnums(Helper.GetCallingUser());
}
foreach (DynamicTextEnumData item in dynamicTextInDatabase)
{
DynamicTextEnum dynamicTextEnum = (DynamicTextEnum)item.DynamicTextEnum;
dynamicTextEnumsInDatabase.Add(dynamicTextEnum);
}
foreach (DynamicTextEnum item in Enum.GetValues(typeof(DynamicTextEnum)))
{
dynamicTextEnumsAll.Add(item);
}
List<DynamicTextEnum> dynamicTextEnumsAvaiable = dynamicTextEnumsAll.Except(dynamicTextEnumsInDatabase).ToList();
if (dynamicTextEnumsAvaiable.Count == 0)
{
TempData["Error"] = "To update the text of a message or warning, please select it from the grid below.";
return RedirectToAction("Index");
}
ViewBag.AvaiableEnums = dynamicTextEnumsAvaiable;
return View();
Peut-être essayer ceci? (non testé)
ViewBag.AvaiableEnums = dynamicTextEnumsAvaiable.Select(x =>
new SelectListItem()
{
Text = x.ToString()
});
Vous pouvez faire ce qui suit
ViewBag.AvaiableEnums = new SelectList(dynamicTextEnumsAvaiable)
Voir http://msdn.Microsoft.com/en-us/library/system.web.mvc.selectlist (v = vs.118) .aspx
Vous pouvez peut-être utiliser une instruction Linq pour la convertir
IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable
.Select(i => new SelectListItem()
{
Text = i.ToString(),
Value = i
});