2011-06-05 15 views
16

en un MVC3-Proyecto, estoy usando una enumeración con pantalla de Atributos:¿Cómo hacer MVC3 DisplayFor para mostrar el valor de un Enum's Display-Attribute?

public enum Foo { 
    [Display(Name = "Undefined")] 
    Undef = 0, 

    [Display(Name = "Fully colored")] 
    Full = 1 
} 

El modelo de clase tiene una propiedad utilizando esta enumeración:

public Foo FooProp { get; set; } 

La vista utiliza la clase de modelo y muestra la propiedad a través de

@Html.DisplayFor(m => m.FooProp) 

Ahora, por fin, mi pregunta:

¿Cómo puedo hacer .DisplayFor() muestra la cadena desde la visualización Atributo en lugar de mostrar únicamente valor y nombre de la enumeración? (debe mostrar "No definido" o "Totalmente coloreado", pero muestra "Undef" o "Completo").

Gracias por consejos! plantilla de visualización

Respuesta

25

Una costumbre podría ayudar (~/Views/Shared/DisplayTemplates/Foo.cshtml):

@using System.ComponentModel.DataAnnotations 
@model Foo 

@{ 
    var field = Model.GetType().GetField(Model.ToString()); 
    if (field != null) 
    { 
     var display = ((DisplayAttribute[])field.GetCustomAttributes(typeof(DisplayAttribute), false)).FirstOrDefault(); 
     if (display != null) 
     { 
      @display.Name 
     } 
    } 
} 
+0

Grande, eso es todo! – Sascha

+0

Creo que debería ser 'if (display.Name.Length> 0)'. Un DisplayAttribute no tiene una propiedad Length. –

+0

'FirstOrDefault()' puede devolver NULL (no hay ningún atributo presente) ¡así que debe verificarlo también! –

Cuestiones relacionadas