2011-03-09 196 views
7

登録ページに選択リストを追加する必要があります。そして、私は選択したアイテムを日付ベースに保存したいと思います。ビューページでは「IEnumerable <SelectListItem>」のキーが「職業」のViewData項目がありません

:私はそのような何かを持っている

とコントローラで:

ViewData["ProfessionList"] = 
       new SelectList(new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5"} 
       .Select(x => new { value = x, text = x }), 
       "value", "text"); 

そして、私はエラーを取得しています:モデルクラスで

<%: Html.DropDownListFor(m => m.Profession, (IEnumerable<SelectListItem>)ViewData["ProfessionList"])%>     
<%: Html.ValidationMessageFor(m => m.Profession)%> 

あり'Profession'というキーを持つ 'IEnumerable'タイプのViewDataアイテムはありません。

私はそれを動作させるために何ができますか?

+0

"SelectList"でキャストして、なぜIEnumerable ?? DropDownListForメソッドはselectListを受け入れます。 –

+0

"SelectList"でキャストしますが、同じエラーが発生します。私はそれがIEnumerable が私がなぜそれを使用しているかを期待していると思います。 – Marta

答えて

8

<%: Html.DropDownListFor(m => m.Profession, new SelectList(new string[] {"Prof1", "Prof2", "Prof3", "Prof4", "Prof5"}, "Prof1"))%> 
       <%: Html.ValidationMessageFor(m => m.Profession)%> 
12

ViewDataではなくビューモデルの使用をお勧めします。だから、:

public ActionResult Index() 
{ 
    var professions = new[] { "Prof1", "Prof2", "Prof3", "Prof4", "Prof5" } 
     .Select(x => new SelectListItem { Value = x, Text = x }); 
    var model = new MyViewModel 
    { 
     ProfessionList = new SelectList(professions, "Value", "Text") 
    }; 
    return View(model); 
} 

とあなたのビューで:

public class MyViewModel 
{ 
    [Required] 
    [DisplayName("Profession")] 
    public string Profession { get; set; } 

    public IEnumerable<SelectListItem> ProfessionList { get; set; } 
} 

とあなたのコントローラで

<%: Html.DropDownListFor(m => m.Profession, Model.ProfessionList) %> 
<%: Html.ValidationMessageFor(m => m.Profession) %> 
あなたがそのようなビューであなただけのSelectListのを定義することができ
関連する問題