MVC 5 Показать атрибут выдачи
Enum Class
public enum DataReleaseChoice
{
Accept,
Decline,
[Display(Name = "Retrieve your application")]
Continue
}
По-моему:
<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@DataReleaseChoice.Accept" class="btn btn-primary" />
<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@DataReleaseChoice.Decline" class="btn btn-primary" />
Все, что я пытаюсь сделать, это добавить строку для новой кнопки "Продолжить", но она должна показывать значение DisplayAttributes ("Получить приложение")
Я посмотрел пример, приведенный в разделе Как получить атрибут отображаемого имени члена Enum с помощью бритвенного кода MVC? но я изо всех сил пытаюсь использовать это в представлении Razor. Я могу отобразить значение в контроллере, используя следующий код,
var displayAttribute = PAI.Web.Utilities.EnumHelper<DataReleaseChoice>.GetDisplayValue(DataReleaseChoice.Continue);
но когда я использую то же самое в бритве, как показано ниже,
<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@PAI.Web.Utilities.EnumHelper<DataReleaseChoice>.GetDisplayValue(DataReleaseChoice.Continue)" class="btn btn-primary" />,
Я получаю ошибку
Using the generic type 'EnumHelper<T>' requires 1 type arguments
Я использую MVC 5.2.3 и читал на других форумах, что MVC 5 поддерживает DisplayAttribute для Enums "из коробки". Я изо всех сил пытаюсь его использовать.
1 ответ
Используйте этот метод расширения, чтобы получить DisplayName
для перечисления в Controller или View:
public static class EnumExtension
{
public static string GetDisplayName(this Enum value)
{
var enumType = value.GetType();
var enumName = Enum.GetName(enumType, value);
var member = enumType.GetMember(enumName)[0];
var attributes = member.GetCustomAttributes(typeof (DisplayAttribute), false);
var outString = string.Empty;
outString = ((DisplayAttribute) attributes[0]).ResourceType != null
? ((DisplayAttribute) attributes[0]).GetName()
: ((DisplayAttribute)attributes[0]).Name;
return outString;
}
}
<input name="@Html.NameFor(model => model.DataReleaseAuthorization)" type="submit" value="@DataReleaseChoice.Continue.GetDsiplayName()" class="btn btn-primary" />,