//lista os valores do enumerador nullable para disponibilizar na dropdownlist: private static IEnumerable <SelectListItem> SetEnumNullableItems <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, List <Enum> listToExclude) { //obter os valores: var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); var values = Enum.GetValues(GetNonNullableModelType(metadata)).Cast <TEnum>(); var dicObjs = new Dictionary <object, string>(); var selected = ""; //para cada valor do enumerador que não pertença à lista de exclusão, adiciona à lista a apresentar e verifica se é o valor selecionado ou não: foreach (var value in values.Where(value => listToExclude == null || (listToExclude != null && !listToExclude.Exists(i => i.Equals(value as Enum))))) { dicObjs.Add(value, (value as Enum).GetDescription()); if (metadata.Model != null && value.ToString() == metadata.Model.ToString()) { selected = metadata.Model.ToString(); } } //forma a selectList com os dados obtidos em cima: IEnumerable <SelectListItem> itens = new SelectList(dicObjs, "Key", "Value", selected); if (metadata.IsNullableValueType) { itens = SingleEmptyItem.Concat(itens); } return(itens); }
public static MvcHtmlString MyEnumDropDownListFor <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, IEnumerable <SelectListItem> modelActionsList) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); Type enumType = GetNonNullableModelType(metadata); IEnumerable <TEnum> values = Enum.GetValues(enumType).Cast <TEnum>(); TypeConverter converter = TypeDescriptor.GetConverter(enumType); IEnumerable <SelectListItem> items = from value in values select new SelectListItem { Text = converter.ConvertToString(value), Value = converter.ConvertToString(value), Selected = value.Equals(metadata.Model) }; if (metadata.IsNullableValueType) { items = SingleEmptyItem.Concat(items); } return(htmlHelper.DropDownListFor( expression, items )); }
public static MvcHtmlString EnumDropDownListSpecialFor <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, bool soloLectura = false) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); Type enumType = GetNonNullableModelType(metadata); IEnumerable <TEnum> values = Enum.GetValues(enumType).Cast <TEnum>(); IEnumerable <SelectListItem> items = from value in values select new SelectListItem { Text = GetEnumDescription(value), Value = value.ToString(), Selected = value.Equals(metadata.Model) }; if (metadata.IsNullableValueType) { items = SingleEmptyItem.Concat(items).OrderBy(a => a.Value); } if (soloLectura) { var htmlAttributes = new { @class = "form-control", @disabled = "disabled" }; return(htmlHelper.DropDownListFor(expression, items, htmlAttributes)); } else { var htmlAttributes = new { @class = "form-control" }; return(htmlHelper.DropDownListFor(expression, items, htmlAttributes)); } }
/// <summary> /// Renders a drop down list /// </summary> /// <param name="htmlHelper"></param> /// <param name="name">Name of the select element</param> /// <param name="options">Options</param> /// <param name="htmlAttributes">HTML attributes for the select</param> public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable <string> options, object htmlAttributes = null) { var items = options.Select(o => new SelectListItem { Value = o, Text = o, Selected = o == null }); items = SingleEmptyItem.Concat(items); return(htmlHelper.DropDownList(name, items, htmlAttributes)); }
public static MvcHtmlString EnumDropDownListForWithDescription <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, object htmlAttributes) { var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); var enumType = GetNonNullableModelType(metadata); var values = Enum.GetValues(enumType).Cast <TEnum>(); var items = from value in values select new SelectListItem { Text = EnumExtensions.GetEnumDescription(value), Value = value.ToString(), Selected = value.Equals(metadata.Model) }; if (metadata.IsNullableValueType) { items = SingleEmptyItem.Concat(items); } return(htmlHelper.DropDownListFor(expression, items, htmlAttributes)); }
/// <summary> /// Creates a drop down list which is bound to an enum from the model. /// </summary> /// <typeparam name="TModel"></typeparam> /// <typeparam name="TEnum"></typeparam> /// <param name="htmlHelper"></param> /// <param name="expression">The enum to be bound to the drop down list.</param> /// <param name="htmlAttributes">Any HTML attributes to add on to the drop down list.</param> /// <returns></returns> public static MvcHtmlString EnumDropDownListFor <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression, object htmlAttributes) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); Type enumType = GetNonNullableModelType(metadata); IEnumerable <TEnum> values = Enum.GetValues(enumType).Cast <TEnum>(); IEnumerable <SelectListItem> items = from value in values select new SelectListItem { Text = GetEnumName(value), Value = value.ToString(), Selected = value.Equals(metadata.Model) }; // If the enum is nullable, add an 'empty' item to the collection if (metadata.IsNullableValueType) { items = SingleEmptyItem.Concat(items); } return(htmlHelper.DropDownListFor(expression, items, htmlAttributes)); }
public static MvcHtmlString EnumDropDownListFor <TModel, TEnum>(this HtmlHelper <TModel> htmlHelper, Expression <Func <TModel, TEnum> > expression) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); Type enumType = GetNonNullableModelType(metadata); IEnumerable <TEnum> values = Enum.GetValues(enumType).Cast <TEnum>(); IEnumerable <SelectListItem> items = values.Select(value => new SelectListItem { Text = value.ToString(), Value = value.ToString(), Selected = value.Equals(metadata.Model) }); if (metadata.IsNullableValueType) { items = SingleEmptyItem.Concat(items); } return(htmlHelper.DropDownListFor( expression, items )); }