2011-02-03 5 views
9

(solo imparare MVC)ASP .NET MVC - Utilizzo di un enum come parte del modello

ho creato una classe del modello:

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 classe modello si riferisce alla enum 'tmRank':

public enum tmRank 
    { 
     Hourly, Salary 
    } 

Quando creo una vista da questo modello del campo 'tm_rank' non compare? La mia speranza era che MVC avrebbe creato una lista dei valori enum.

+0

cosa fa il tuo vista sembra in questo momento? Stai usando 'EditorFor()' o qualcos'altro? – marcind

risposta

12

La mia ipotesi è che non capisce che tipo di campo per creare un Enum. Un enum può essere associato a un elenco a discesa, una serie di pulsanti di opzione, una casella di testo, ecc

Che tipo di voce vuoi per la tua Enum? Dovrebbero selezionarlo da una lista? Risposta che può aiutarci con il codice necessario per quella situazione.

A cura di aggiungere il codice per il tuo commento:

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", ""); 
} 

Poi nel modello:

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

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

E infine si può utilizzare nella tua vista con:

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

Questo terrà i valori enum in TmRankList. Quando il tuo modulo è pubblicato, TmRank manterrà il valore selezionato.

Ho scritto questo senza Visual Studio, però, così ci potrebbero essere problemi. Ma questo è l'approccio generale che uso per risolverlo.

+0

Hai ragione - speravo che l'utente potesse selezionare da una lista. –

+0

Ci sarebbe un modo per ottenere il valore per un'etichetta piuttosto che un menu a discesa? – Jamiegs

+0

Sì, è possibile omettere gli elenchi di selezione, poiché non esiste un concetto di elenco con un'etichetta. basta fare Html.LabelFor (c => c.Property) – mfanto

Problemi correlati