2015-09-09 2 views
3

Я использую перечисления для некоторых свойств, которые имеют только определенное количество опций (например, Пол). Я делаю эти перечисления с помощью @Html.EnumDropDownListFor(...), который использует атрибут Display, чтобы правильно отображать параметры (эти значения исходят из ресурса, потому что они должны быть переводимыми).Как добавить атрибут Display к внешнему перечислению?

public enum Gender 
{ 
    [Display(Name = "LabelMale", ResourceType = typeof(Translation))] 
    Male, 
    [Display(Name = "LabelFemale", ResourceType = typeof(Translation))] 
    Female 
} 

Но эти перечисления приходят из внешнего проекта, который не может быть отредактирован или не имеет доступ к System.ComponentModel.DataAnnotations именам. Поэтому я не могу добавить необходимые атрибуты Display к значениям в этом перечислении.

Viewmodels имеют ту же проблему, но для моделей viewmodels я могу использовать атрибут MetadataType(...).

Однако это не работает для перечислений.

Есть ли аналогичное решение, чтобы я мог иметь переводимые перечисления?

+3

Вы думали определить свои собственные перечисления и написать класс для преобразования между вашим и внешним проектом? Если их много, отражение тоже пригодится. – Hamed

+0

@ Hamed Да, я считаю это, но я надеялся, что в asp.net есть лучшее решение, поэтому мне не нужно изобретать колесо. – Waaghals

ответ

1

Вы можете попытаться использовать TypeDesciptor, чтобы добавить атрибут во время выполнения. Одна проблема может возникнуть при чтении этих атрибутов из фрейма asp.net-mvc, если они не используют TypeDescriptor для разрешения этих атрибутов.

Но вы могли бы попробовать.

+0

После первоначального тестирования это выглядело так: 'EnumDropDownListFor()' не использовал 'TypeConverter', я только что подтвердил это, asp.net MVC 5.2.2 не использует' TypeDescriptor'. Он использует 'EnumHelper.GetDisplayName()', который только читает атрибут 'Display'. (Https://aspnetwebstack.codeplex.com/SourceControl/changeset/view/66298100f4e3#src/System.Web.Mvc/Html/SelectExtensions.cs) – Waaghals

+0

В зависимости от того, что вы говорите, у вас не будет никакого шанса сделать это ... Извините ... – BendEg

+0

В настоящее время вы просматриваете https://github.com/nuhusky/gizmo-helpers/blob/master/Helpers/Html/EnumHtmlHelperExtensions .cs, который работает, когда 'TypeConverter' добавлен в перечисление, теперь он хочет добавить его к свойству, а не самому перечислению. – Waaghals

Смежные вопросы