GetEnumSelectList renvoie une valeur d'index et non la valeur de texte. Comment obtenir la valeur du texte?
Usage: <select asp-for="Policy" asp-items="Html.GetEnumSelectList(typeof(PolicyEnum))" class="form-control"></select> Results: <select class="form-control" id="Policy" name="Policy"> <option value="0">SuperAdmin</option> <option value="1">Admin</option> <option value="2">User</option> <option value="3">ClientAdmin</option> <option value="4">ClientUser</option> </select> Desired Results: <select class="form-control" id="Policy" name="Policy"> <option value="SuperAdmin">SuperAdmin</option> <option value="Admin">Admin</option> <option value="User">User</option> <option value="ClientAdmin">ClientAdmin</option> <option value="ClientUser">ClientUser</option> </select>
4 Réponses :
vous devez décorer votre énumération avec un attribut Description
Exemple
public enum SomeEnum
{
[Display (Name = "First")]
Premier = 1,
[Display (Name = "Second")]
Seconde = 2
}
J'ai essayé ça et ça. public enum PolicyEnum {[EnumMember (Value = "SuperAdmin")] SuperAdmin, [EnumMember (Value = "Admin")] Admin, [EnumMember (Value = "User")] User, [EnumMember (Value = "ClientAdmin")] ClientAdmin, [EnumMember (Value = "ClientUser")] ClientUser}
Après avoir décoré votre Enum avec une description, vous pouvez l'utiliser:
internal static string GetDescription(Enum value) { var attributes = value.GetType().GetField(value.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), false); return attributes.Length == 0 ? value.ToString() : ((DescriptionAttribute) attributes[0]).Description; }
Si vous n'avez besoin que de SuperAdmin
, vous pouvez définir l'extension ci-dessous:
public static class ExtensionMethods { public static IEnumerable<SelectListItem> GetEnumMemberSelectList<TEnum>(this IHtmlHelper htmlHelper) where TEnum : struct { return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>() .Select(x => new SelectListItem { Text = x.EnumMemberValue(), Value = x.ToString() }), "Value", "Text"); } public static string EnumMemberValue(this Enum value) { FieldInfo field = value.GetType().GetField(value.ToString()); EnumMemberAttribute attribute = Attribute.GetCustomAttribute(field, typeof(EnumMemberAttribute)) as EnumMemberAttribute; return attribute == null ? value.ToString() : attribute.Value; } }
Et utilisation:
<select asp-items="Html.GetEnumValueSelectList<PolicyEnum>()" class="form-control"></select>
Si vous avez besoin de [EnumMember (Value = "Admin")]
, vous pouvez essayer
public static class ExtensionMethods { public static IEnumerable<SelectListItem> GetEnumValueSelectList<TEnum>(this IHtmlHelper htmlHelper) where TEnum : struct { return new SelectList(Enum.GetValues(typeof(TEnum)).OfType<Enum>() .Select(x => new SelectListItem { Text = x.ToString(), Value = x.ToString() }), "Value", "Text"); } }
Au lieu de ceci:
@Html.EnumDropDownListFor(model => model.PolicyEnum, null, new { @id = "ddlPolicyEnum", @class = "form-control", @style = "width:200px;" })
Utilisez ceci:
public enum PolicyEnum { [Display(Name="First")] First = 1, [Display(Name="Second")] Second = 2 }
et conservez l'affichage pour enum.
<select asp-for="Policy" asp-items="Html.GetEnumSelectList<Enums.PolicyEnum>()" class="form-control"></select>
Depuis MVC5.1, vous pouvez également utiliser cet assistant:
<select asp-for="Policy" asp-items="Html.GetEnumSelectList(typeof(PolicyEnum))" class="form-control"></select>
Veuillez ajouter le code à l'origine du problème et le résultat réel / attendu pour clarifier davantage la question.