Что делает атрибут EnumDataType в ASP.NET MVC? - PullRequest
9 голосов
/ 27 апреля 2011

Я использовал string свойства некоторых объектов моей модели для представления перечислений. Я использую только строки, потому что пока нет поддержки enum в Entity Framework Code First. Во всяком случае, я заметил, что в System.ComponentModel.DataAnnotations есть атрибут с именем EnumDataType. Я попытался установить этот атрибут, но он, похоже, ни на что не влияет.

Я должен упомянуть, что моей конечной целью является отображение соответствующего раскрывающегося списка для любого типа перечисления в представлении «создать» или «редактировать». Я подумал, что, возможно, EnumDataType облегчит эту задачу в сценарии с автоподстановкой, но я не уверен, что это так.

Три вопроса:

  1. Имеет ли EnumDataType цель в ASP.NET MVC?
  2. Если да, что он делает?
  3. Нужно ли, чтобы мои свойства модели были int (вместо string), чтобы использовать EnumDataType?

Ответы [ 4 ]

9 голосов
/ 27 апреля 2011

EnumDataType в настоящее время поддерживается только сайтами динамических данных ASP.NET (в .NET 4.0).Как правило, вы можете создать свой собственный HTML-помощник, который будет проверять свойство, содержит ли он атрибут (по отражению), и создает для него раскрывающийся список со значениями из связанного перечисления.

5 голосов
/ 04 декабря 2011

Лучшим решением, которое я нашел для этого, было объединение этого блога с этим ответом . Это делает вид и модель очень удобочитаемыми и удобными в обслуживании.

Смотрите мой полный ответ здесь .

Модель:

public enum YesPartialNoEnum
{
    [Description("Yes definitely")]
    Yes,
    [Description("No way!")]
    No
}

//........

[Display(Name = "The label for my dropdown list")]
public virtual Nullable<YesPartialNoEnum> CuriousQuestion{ get; set; }

//........

Вид:

@Html.ValidationMessageFor(model => model.CuriousQuestion)
0 голосов
/ 20 июня 2011

Появляется MVC3 или EF4.1 CodeFirst для проверки свойств с этим атрибутом. Это удобно из-за отсутствия поддержки перечисления в EF, что означает, что вы можете поместить атрибут в целочисленное свойство.

0 голосов
/ 27 апреля 2011

MVC 3 не имеет никакой логики для обработки EnumDataTypeAttribute.

...