2011-02-03 11 views
9

(sólo el aprendizaje MVC)ASP .NET MVC - Usando una enumeración como parte del modelo de

He creado una clase del modelo:

public class Employee 
    { 
     public int ID { get; set; } 

     [Required(ErrorMessage="TM Number is Required")] 
     public string tm_number { get; set; } 

     //use enum? 
     public tmRank tm_rank { get; set; } 
    } 

La clase de modelo se refiere a la enumeración 'tmRank':

public enum tmRank 
    { 
     Hourly, Salary 
    } 

Cuando creo una vista desde este modelo, ¿el campo 'tm_rank' no aparece? Mi esperanza era que MVC crearía una lista de los valores enum.

+0

¿Cómo se ve tu vista en este momento? ¿Estás usando 'EditorFor()' o algo más? – marcind

Respuesta

12

Supongo que no entiende qué tipo de campo crear para un Enum. Un Enum puede vincularse a una lista desplegable, un conjunto de botones de opción, un cuadro de texto, etc.

¿Qué tipo de entrada desea para su Enum? ¿Deberían seleccionarlo de una lista? Respondiendo eso puede ayudarnos con el código necesario para esa situación.

Editado para agregar código por tu comentario:

public static SelectList GetRankSelectList() 
{ 

    var enumValues = Enum.GetValues(typeof(TmRank)).Cast<TmRank>().Select(e => new { Value = e.ToString(), Text = e.ToString() }).ToList(); 

    return new SelectList(enumValues, "Value", "Text", ""); 
} 

Luego, en su modelo:

public class Employee 
{ 
    public Employee() 
    { 
     TmRankList = GetRankSelectList(); 
    } 

    public SelectList TmRankList { get; set; } 
    public TmRank TmRank { get; set; } 
} 

Y finalmente se puede usar en su vista con:

<%= Html.DropDownListFor(c => c.TmRank, Model.TmRankList) %> 

Este mantendrá los valores enum en TmRankList. Cuando se publique su formulario, TmRank mantendrá el valor seleccionado.

Escribí esto sin estudio visual, por lo que podría haber problemas. Pero este es el enfoque general que uso para resolverlo.

+0

Tiene razón: esperaba que el usuario seleccionara de una lista. –

+0

¿Habría alguna manera de obtener el valor de una etiqueta en lugar de un menú desplegable? – Jamiegs

+0

Sí, puede omitir las listas de selección, ya que realmente no existe el concepto de una lista con una etiqueta. simplemente haga Html.LabelFor (c => c.Property) – mfanto

Cuestiones relacionadas