2011-02-03 56 views
9

(chỉ học MVC)ASP NET MVC - Sử dụng một enum như là một phần của mô hình

Tôi đã tạo ra một lớp mô hình:

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

Lớp mô hình đề cập đến enum 'tmRank':

public enum tmRank 
    { 
     Hourly, Salary 
    } 

Khi tôi tạo chế độ xem từ mô hình này, trường 'tm_rank' không xuất hiện? Hy vọng của tôi là MVC sẽ tạo ra một danh sách các giá trị enum.

+0

Chế độ xem của bạn trông như thế nào ngay bây giờ? Bạn đang sử dụng 'EditorFor()' hay cái gì khác? – marcind

Trả lời

12

Tôi đoán là không hiểu loại trường nào cần tạo cho một Enum. An Enum có thể bị ràng buộc vào danh sách thả xuống, một bộ nút radio, hộp văn bản, v.v.

Bạn muốn loại mục nhập nào cho Enum của mình? Họ có nên chọn nó từ một danh sách không? Việc trả lời có thể giúp chúng tôi với mã cần thiết cho tình huống đó.

Edited để thêm mã cho mỗi bình luận của bạn:

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

Sau đó, trong mô hình của bạn:

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

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

Và cuối cùng bạn có thể sử dụng nó trong Xem với:

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

này sẽ giữ các giá trị enum trong TmRankList. Khi biểu mẫu của bạn được đăng, TmRank sẽ giữ giá trị đã chọn.

Tôi đã viết bài này mà không có studio trực quan, do đó, có thể có vấn đề. Nhưng đây là cách tiếp cận chung mà tôi sử dụng để giải quyết nó.

+0

Bạn đúng - tôi đã hy vọng có người dùng chọn từ danh sách. –

+0

Có cách nào để nhận được giá trị cho nhãn chứ không phải một menu thả xuống? – Jamiegs

+0

Vâng, bạn có thể bỏ qua các danh sách lựa chọn, vì thực sự không có khái niệm về danh sách có nhãn. chỉ cần làm Html.LabelFor (c => c.Property) – mfanto

Các vấn đề liên quan