具有键“Survey_Group”的ViewData项的类型为“System.String”,但必须是“IEnumerable ”类型

我已将db中的值绑定到下拉列表。 但是,当我尝试在视图中提交时,它显示:

具有键“Survey_Group”的ViewData项的类型为“System.String”,但必须是“IEnumerable”类型。

有人可以指导我吗? 谢谢。

模型:

[MaxLength(100)] [DisplayName("Owner Groups")] public string Survey_Group { get; set; } 

视图:

 @Html.LabelFor(model => model.Survey_Group, "Owner Groups") @Html.DropDownListFor(model => model.Survey_Group, (SelectList)ViewBag.GroupList) 

控制器:

 public ActionResult SURV_Main_Create() { ViewBag.CurrentPage = "create"; var model = new SURV_Main_Model(); ViewBag.GroupList = new SelectList(db.SURV_Group_Model, "Group_ID", "GroupName"); return View(model); } // POST: /SURV_Main/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult SURV_Main_Create(SURV_Main_Model surv_main_model) { if (ModelState.IsValid) { var r = new Random(); int randomno = r.Next(1, 1000000); surv_main_model.Survey_Key = "SURV" + DateTime.Now.ToString("yyyyMMddHHmmss") + randomno; surv_main_model.Survey_Creator = User.Identity.Name; db.SURV_Main_Model.Add(surv_main_model); db.SaveChanges(); return RedirectToAction("SURV_Main_Edit", new { id = surv_main_model.Survey_ID }); } return View(surv_main_model); } 

在POST方法中,当模型无效时,您返回视图,但尚未为ViewBag.GroupList (您在DropDownListFor()方法中使用)分配值,因此其为null,因此为exception。

在你需要的POST方法中

 [HttpPost] [ValidateAntiForgeryToken] public ActionResult SURV_Main_Create(SURV_Main_Model surv_main_model) { if (ModelState.IsValid) { .... } ViewBag.GroupList = new SelectList(db.SURV_Group_Model, "Group_ID", "GroupName"); // add this return View(surv_main_model); }