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();
Podrías hacer lo siguiente
ViewBag.AvaiableEnums = new SelectList(dynamicTextEnumsAvaiable)
Consulte http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist(v=vs.118).aspx
Solo usa el método .AsEnumerable () .
Ejemplo:
IEnumerable<SelectListItem> myCollection = dynamicTextEnumsAvaiable.AsEnumerable()
Consulte aquí: https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable(v=vs.110).aspx
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()