2012-01-26 14 views
0

私は同様の投稿を見ましたが、私の場合は何もしませんでした。 私はうまく読み込むフォームを持っており、その中のすべてのカテゴリを持つカテゴリドロップダウンが表示されます。 問題はフォームを投稿しようとするときです。ドロップダウンリストを含むMVCフォームを投稿しようとしたときにエラーが発生しました

私はこのエラーを取得する:キー「カテゴリー」があり

のViewData項目はタイプ「可能System.String」があるが、型「のIEnumerable」でなければなりません。 Html.DropDownList @

( "カテゴリー"、Model.Categories)< - ここでは赤色

が私の見解である。ここでは

@using (Html.BeginForm("Save", "Album", FormMethod.Post, new { id = "frmNewAlbum" })) 
{     
    @Html.DropDownList("Category", Model.Categories) 
} 

は私のモデルである:

public class AlbumModel 
{   
     public string Title { get; set; } 

     public string Category { get; set; } 

     public List<SelectListItem> Categories { get; set; } <-- holds categories 
} 

これはページを表示するコントローラの操作です:

ポストを受け取る
[HttpGet] 
public ActionResult Save() 
     { 
      var model = new AlbumModel(); 
      var categories = new List<SelectListItem>() { new SelectListItem() { Text = "-- pick --" } }; 
      categories.AddRange(svc.GetAll().Select(x => new SelectListItem() { Text = x.Name, Value = x.Name })); 
      model.Categories = categories; 
      return View(model); 
     } 

処置:POSTアクションで

[HttpPost] 
    public ActionResult Save(AlbumModel model) 
    {    
       var album = new AlbumDoc() 
       {       
        Category = model.Category, 
        Title = model.Title, 
       }; 

       svc.SaveAlbum(album); 

     return View(model); 
    } 

答えて

0

あなたは同じビューを再表示しているように見えるが、あなたは、ドロップダウンリストの値が含まれます、あなたのビューモデルにCategoriesプロパティに移入されていません。そして、私は強く型付けされたヘルパーを使用することをお勧めします。だから、:

public class AlbumController: Controller 
{ 
    [HttpGet] 
    public ActionResult Save() 
    { 
     var model = new AlbumModel(); 
     model.Categories = GetCategories(); 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Save(AlbumModel model) 
    {    
     var album = new AlbumDoc() 
     {       
      Category = model.Category, 
      Title = model.Title, 
     }; 
     svc.SaveAlbum(album); 
     model.Categories = GetCategories(); 
     return View(model); 
    } 

    private IList<SelectListItem> GetCategories() 
    { 
     return svc 
      .GetAll() 
      .ToList() 
      .Select(x => new SelectListItem 
      { 
       Text = x.Name, 
       Value = x.Name 
      }); 
    } 
} 

とあなたのビューで:

@model AlbumModel 
... 
@using (Html.BeginForm("Save", "Album", FormMethod.Post, new { id = "frmNewAlbum" })) 
{     
    @Html.DropDownListFor(
     x => x.Category, 
     Model.Categories, 
     -- pick -- 
    ) 
} 
+0

まず一つは動作しません、それは言う:値をNullにすることはできません。 パラメータ名:items。もう1つは古いエラーです。 – kheya

+0

Darrin、これは完全なポストではないajax投稿であるはずです。なぜ投稿をクリックした後にページがリフレッシュされますか? – kheya

+1

@Projapati - Ajax.BeginFormを使用していないためですか? –

関連する問題