2011-05-26 13 views
13

¿Existe alguna forma inteligente de obtener el andamio MVC para generar un menú desplegable o un cuadro de lista para las propiedades del modelo que son valores enum?Trabajar con enumeraciones en ASP.NET MVC 3

Ejemplo:

public class MyModel 
{ 
    public Color MyColor { get; set; } 
    public Option Options { get; set; } 
} 

public enum Color 
{ 
    None = 0, 
    Red = 1, 
    Blue = 2, 
    White = 3 
} 

[Flags] 
public enum Option 
{ 
    NotSet = 0, 
    Option1 = 1, 
    Option2 = 2, 
    Option3 = 4, 
    Option4 = 8 
} 

Para la propiedad “Color”, una lista desplegable estaría bien. Y para la propiedad "Opciones", un cuadro combinado o una lista de casillas de verificación sería genial.

¿Hay algún tipo de soporte integrado en el marco/herramientas MVC para esto? Actualmente, Visual Studio simplemente ignora las propiedades del modelo de los tipos enum cuando creo una vista desde el modelo.

¿Cuál sería la mejor manera de implementar esto?

Respuesta

12

Método auxiliar

Dropdownlist for Enum

Yo he utilizado esto con éxito en mis propios proyectos.

public static MvcHtmlString EnumDropDownListFor<TModel, TEnum>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TEnum>> expression) 
{ 
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData); 
    Type enumType = GetNonNullableModelType(metadata); 
    IEnumerable<TEnum> values = Enum.GetValues(enumType).Cast<TEnum>(); 

    TypeConverter converter = TypeDescriptor.GetConverter(enumType); 

    IEnumerable<SelectListItem> items = 
     from value in values 
     select new SelectListItem 
        { 
         Text = converter.ConvertToString(value), 
         Value = value.ToString(), 
         Selected = value.Equals(metadata.Model) 
        }; 

    if (metadata.IsNullableValueType) 
    { 
     items = SingleEmptyItem.Concat(items); 
    } 

    return htmlHelper.DropDownListFor(
     expression, 
     items 
     ); 
} 
1

gran solución a este problema: How do you create a dropdownlist from an enum in ASP.NET MVC?

Eso es para el desplegable, obviamente, pero para las otras opciones de interfaz de usuario lo desea puede utilizar el conjunto de valores para crearlos a través de lazos.

No está incorporado, pero es bastante fácil de hacer.

Cuestiones relacionadas