tag switch statement net for asp c# asp.net asp.net-mvc razor enums

c# - switch - tag helper asp for



Nombre para mostrar de la lista desplegable de enumeraciĆ³n en Razor (4)

Desde MVC 5.1, han agregado este nuevo ayudante. Solo necesitas una enumeración

public enum WelcomeMessageType { [Display(Name = "Prior to accepting Quote")] PriorToAcceptingQuote, [Display(Name = "After Accepting Quote")] AfterAcceptingQuote }

y puede crear la lista desplegable que muestra los nombres escribiendo

@Html.EnumDropDownListFor(model => model.WelcomeMessageType, null, new { @id = "ddlMessageType", @class = "form-control", @style = "width:200px;" })

¿Cómo puedo mostrar los nombres personalizados de mis enumeraciones en la lista desplegable en Razor? Mi código actual es:

@Html.DropDownListFor(model => model.ExpiryStage, new SelectList(Enum.GetValues(typeof(ExpiryStages))), new { @class = "selectpicker" })

Mi enumeración es:

public enum ExpiryStages { [Display(Name = "None")] None = 0, [Display(Name = "Expires on")] ExpiresOn = 1, [Display(Name = "Expires between")] ExpiresBetween = 2, [Display(Name = "Expires after")] ExpiresAfter = 3, [Display(Name = "Current")] Current = 4, [Display(Name = "Expired not yet replaced")] ExpiredNotYetReplaced = 5, [Display(Name = "Replaced")] Replaced = 6 }

Por ejemplo, quiero mostrar "Caducado aún no reemplazado" en lugar de ExpiredNotYetReplaced en mi DropDownList.


En ASP.Net Core, se puede usar el método IHtmlHelper.GetEnumSelectList() , que se puede usar de la siguiente manera, por ejemplo:

asp-items="@Html.GetEnumSelectList<MyEnumType>()"


Tengo una extensión de enumeración para recuperar el nombre para mostrar.

public static string GetDescription<TEnum>(this TEnum value) { var attributes = value.GetAttributes<DescriptionAttribute>(); if (attributes.Length == 0) { return Enum.GetName(typeof(TEnum), value); } return attributes[0].Description; }

Que puedes usar así:

Enum.GetValues(typeof(ExpiryStages)).Select(e => new { Id = Convert.ToInt32(e), Name = e.GetDescription() });

Utilizo un útil ayudante para generar listas seleccionadas de enums:

public static SelectList SelectListFor<T>() where T : struct { var t = typeof (T); if(!t.IsEnum) { return null; } var values = Enum.GetValues(typeof(T)).Cast<T>() .Select(e => new { Id = Convert.ToInt32(e), Name = e.GetDescription() }); return new SelectList(values, "Id", "Name"); }


Usted puede usar para desplegable el núcleo de asp.net

<select asp-for="DeliveryPolicy" asp-items="Html.GetEnumSelectList<ExpiryStages>()"> <option selected="selected" value="">Please select</option> </select>