8

He estado usando string propiedades en algunos de los objetos de mi modelo para representar enums. Solo estoy usando cadenas porque aún no hay soporte enum en Entity Framework Code First. De todos modos, noté que hay un atributo en System.ComponentModel.DataAnnotations llamado EnumDataType. Intenté establecer este atributo, pero parece que no afecta nada.¿Qué hace el atributo EnumDataType en ASP.NET MVC?

Debo mencionar que mi objetivo final es tener la lista desplegable apropiada para cualquier tipo de enumeración en una vista "crear" o "editar". Pensé que tal vez EnumDataType lo haría más fácil en un escenario de auto-andamios, pero no estoy seguro de que este sea el caso.

Tres preguntas:

  1. ¿Tiene EnumDataType tienen un propósito en ASP.NET MVC?
  2. En caso afirmativo, ¿qué hace?
  3. ¿Necesito que mis propiedades de modelo sean int (en lugar de string) para aprovechar EnumDataType?

Respuesta

8

EnumDataType actualmente solo es compatible con los sitios de datos dinámicos de ASP.NET (en .NET 4.0). En general, puede crear su propio asistente de HTML personalizado que tomará la comprobación de propiedad si contiene el atributo (por reflexión) y crea un menú desplegable con los valores de la enumeración vinculada.

+0

+1 y gracias. Estaba pensando que probablemente necesitaría un método de ayuda. ¿Necesito un método de ayuda para cada tipo de enumeración o es posible escribir uno de uso múltiple que funcione para cualquier tipo de enumeración? – devuxer

+0

Creo que debería ser posible escribir un único método que funcione para todos los tipos enum porque el tipo enum se extraerá del atributo. –

0

MVC 3 no tiene ninguna lógica para manejar EnumDataTypeAttribute.

0

Ya sea MVC3 o EF4.1 CodeFirst parece validar propiedades con este atributo. Práctico debido a la falta de soporte enum en EF actualmente, lo que significa que puede poner el atributo en una propiedad entera.

4

La mejor solución que encontré para esto fue la combinación de this blog con this answer. Esto hace que tanto la vista como el modelo sean muy legibles y mantenibles.

Ver mi full answer here.

Modelo:

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; } 

//........ 

Vista:

@Html.ValidationMessageFor(model => model.CuriousQuestion) 
Cuestiones relacionadas