2016-06-21 25 views
2

ページが最初に読み込まれるときにドロップダウンリストをバインドできますが、このページがポストバックしたときにエラーが発生します:'CicekListesi'キーを持つ 'IEnumerable <SelectListItem>'タイプのViewDataアイテムがありません

There is no ViewData item of type IEnumerable<SelectListItem> that has the key 'CicekListesi'.

は私のコントローラは、次のようになります。

[HttpGet] 
public ActionResult UrunEkleCicek() 
{ 
    ApplicationDbContext db = new ApplicationDbContext(); 

    ViewData["CicekListesi"] = new SelectList(db.CicekTuru, "cicekID", "cicekAdi"); 

    return View(); 
} 

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult UrunEkleCicek(Urun UrunBilgi) 
{ 
    ApplicationDbContext db = new ApplicationDbContext(); 

    // ... 

    return View(); 
} 

ビューは次のようになります。

@using (Html.BeginForm("UrunEkleCicek","EkleCikart", FormMethod.Post ,new{enctype="multipart/form-data" })) 
{ 
    @Html.AntiForgeryToken(); 

    @Html.DropDownList("CicekListesi", null, "Çiçek türü seçin", new { @class = "form-control"})*@ 

    <input type="submit" value="Ürünü Ekle" class="btn btn-success" /> 

} 

がどのように修正することができます この?

+3

あなたのPOSTアクションメソッドで 'ViewData [" CicekListesi "]'を再び設定することによって。 – CodeCaster

+1

'CicekListesi'の値は、ビューを返す前にPOSTメソッドで' SelectList'を再割り当てしなかったので、 'null'です。 [この質問/回答]と同じです(http://stackoverflow.com/questions/34366305/the-viewdata-item-that-has-the-key-xxx-is-of-type-system-int32-but-must)。 -be-o)、好きな 'DropDownListFor()'ではなく 'DropDownList()'を使用しているために別のメッセージが表示される –

+0

@CodeCaster私はmvcで新しくなっています。あなたはコードで書くことができますか? :) –

答えて

0

MVCはWebフォームではないため、MVCはページの状態を保持しません。

ViewData["CicekListesi"] = new SelectList(db.CicekTuru, "cicekID", "cicekAdi"); 

まあは、「適切に」、あなたではなく、このためにビューモデルを使用すると思いますが、上記の作品だけでなく:

あなたは既に適切にGETアクションメソッドのドロップダウンのデータを設定しています。

このデータをPOSTしたときに何か問題がある場合は、明らかにフォームを再度表示する必要があります。フォームは、適切に表示するために再度SelectListデータを必要とします。

したがって、POSTアクションメソッドでも上記のコードを繰り返してください。

関連する問題