首次加载页面时,我可以绑定下拉列表,但是当页面回发时会出现此错误:


  没有类型为IEnumerable<SelectListItem>的ViewData项,其键为'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" />

}


我怎样才能解决这个问题?

最佳答案

MVC不是WebForms,MVC不会保留页面的任何状态。

您已经在GET操作方法中正确设置了下拉菜单的数据:

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


好吧,“适当地”,您宁愿为此使用视图模型,但是上面的方法同样适用。

现在,当您发布此数据时,出了点问题,您显然想再次显示该表单。然后,表单再次需要SelectList数据才能正确显示。

因此,只需在POST操作方法中重复上述代码即可。

09-26 20:10