2011-02-03 12 views
9

manken sınıfı oluşturdukASP.NET MVC - modeli bir parçası olarak bir enum kullanarak

(sadece MVC öğrenme):

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

model sınıf enum 'tmRank' anlamına gelir:

public enum tmRank 
    { 
     Hourly, Salary 
    } 

Bu modelden bir görünüm oluşturduğumda 'tm_rank' alanı görünmüyor mu? Umudum MVC'nin enum değerlerinin bir listesini oluşturmasıydı.

+0

Görünümünüz şu anda nasıl görünüyor? EditorFor() 'veya başka bir şey mi kullanıyorsunuz? – marcind

cevap

12

Tahminimce, Enum için hangi tür alanın oluşturulacağını anlamıyor. Bir Enum bir açılan listeye, bir dizi radyo düğmesine, bir metin kutusuna vb. Bağlanabilir.

Enum'unuz için ne tür bir giriş yapmak istersiniz? Bir listeden seçmeli mi? Bu durum için gereken kodla bize yardımcı olabilecek cevaplar.

Yorumlarınız başına kod eklemek Düzenlendi: Modelinizdeki Sonra

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

:

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

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

Ve nihayet ile görünümünde kullanabilirsiniz:

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

Bu Enum değerlerini TmRankList'te tutacak. Formunuz gönderildiğinde, TmRank seçilen değeri tutacaktır.

Bunu görsel stüdyo olmadan yazdım, bu yüzden sorun olabilir. Ama bu, onu çözmek için kullandığım genel bir yaklaşım.

+0

Haklısınız - Kullanıcının bir listeden seçmesini umuyordum. –

+0

Bir etiket için değeri almak yerine bir değer almanın bir yolu var mı? – Jamiegs

+0

Evet, seçim listelerini çıkartabilirsiniz, çünkü etiketli bir liste ile ilgili hiçbir kavram yoktur. Sadece Html.LabelFor (c => c.Property) – mfanto