with mvc enumdropdownlistfor enum dropdownlist c# asp.net-mvc enums

c# - with - enumdropdownlistfor mvc



Convertir lista a IEnumerable<SelectListItem> (5)

Problema complicado aquí. Estoy tratando de convertir elementos para una lista a IEnumerable<SelectListItem> .

Liza

dynamicTextInDatabase simplemente devuelve todas las Enums que se usan en mi base de datos. Actualmente solo devuelve 1 y 2. La clase de datos simple tiene un valor int.

dynamicTextEnumsInDatabase es la misma lista que la anterior solo en la clase que realmente almacena mis Enums.

dynamicTextEnumsAll es una lista de todos los Enums que están disponibles en mi aplicación. Actualmente: 1, 2 y 3.

dynamicTextEnumsAvaiable es una lista de todos los Enums no utilizados. Combina todas las enumeraciones y luego elimina las que están en la lista de la base de datos.

Necesito pasar el dynamicTextEnumsAvaiable a mi vista a través del ViewBag para mostrar en una lista desplegable. Sin embargo, debe ser IEnumerable<SelectListItem> lugar de una List .

Código

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();




Tal vez intente esto? ( no probado )

ViewBag.AvaiableEnums = dynamicTextEnumsAvaiable.Select(x => new SelectListItem() { Text = x.ToString() });


Tal vez puedas usar una sentencia Linq para convertirla

IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable .Select(i => new SelectListItem() { Text = i.ToString(), Value = i });


has probado

IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable.AsEnumerable()