2011-02-03 6 views
9

私はモデルクラスを作成しているASP .NET MVCは - モデルの一部として列挙型を使用して

(ただMVCを学ぶ):

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

モデルクラスがenum 'tmRank' を参照します。

public enum tmRank 
    { 
     Hourly, Salary 
    } 

このモデルからビューを作成すると、 'tm_rank'フィールドは表示されません。私の希望は、MVCが列挙型の値のリストを作成するということでした。

+0

あなたのビューは現在どのように見えますか?あなたは 'EditorFor()'などを使っていますか? – marcind

答えて

12

私の推測では、Enumに対してどのタイプのフィールドを作成するのか理解できません。列挙型は、ドロップダウンリスト、ラジオボタンのセット、テキストボックスなどにバインドできます。

Enumにはどんなタイプのエントリが必要ですか?彼らはリストからそれを選ぶべきでしょうか?その状況に必要なコードを手助けすることができます。

コメントごとにコードを追加するために編集:あなたのモデルで次に

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

をそして最後に、あなたとあなたのビューでそれを使用することができます。

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

これを列挙型の値をTmRankListに保持します。フォームが転記されると、TmRankは選択した値を保持します。

私はビジュアルスタジオなしでこれを書いたので、問題がある可能性があります。しかし、これを解決するための一般的なアプローチです。

+0

あなたは正しいです - 私はユーザーがリストから選択することを望んでいました。 –

+0

ドロップダウンではなくラベルの値を取得する方法はありますか? – Jamiegs

+0

ええ、選択リストを省略することができます。なぜなら、本当にラベルを持つリストの概念はないからです。ちょうどHtml.LabelFor(c => c.Property) – mfanto

関連する問題