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>