具有键’GenderID’的ViewData项的类型为’System.Int32’,但必须是’IEnumerable ‘类型

当我尝试提交/发布数据时出现错误…有人可以帮助我尝试每个post,但他们没有帮助我。 我是mvc的新手…这里有任何帮助我的代码是……

public ActionResult Create() { UserProfileCreateViewModel model = new UserProfileCreateViewModel(); model.Gender = _GenderRepository.GetAll() .Select(x => new SelectListItem { Value = x.ID.ToString(), Text = x.DESCRIPTION }); return View(model); } [HttpPost] public ActionResult Create(UserProfileCreateViewModel model) { if (ModelState.IsValid) { UserProfile user = new UserProfile(); user.GENDER_ID = model.GenderID; _UserProfileRepository.Add(user); _UserProfileRepository.Save(); return RedirectToAction("Index", "Home"); } return View(model); } 

视图

 
@Html.LabelFor(model => model.GenderID, new { @class = "control-label col-md-2" })
@Html.DropDownListFor(model => model.GenderID, Model.Gender, "Select from List", new { @class = "form-control" }) @Html.ValidationMessageFor(model => model.GenderID, string.Empty, new { @class = "text-danger" })

模型

 public class UserProfileCreateViewModel { [Required(ErrorMessage="{0} is required")] [Display(Name="Gender")] public int GenderID { get; set; } public IEnumerable Gender { get; set; } } 

InvalidOperationException:具有键’GenderID’的ViewData项的类型为’System.Int32’,但必须是’IEnumerable ‘类型。

在这里我试过这个…. // POST:/ UserProfile / Create /

  [HttpPost] public ActionResult Create(UserProfileCreateViewModel model) { if (ModelState.IsValid) { UserProfile user = new UserProfile(); user.GENDER_ID = model.GenderID; _UserProfileRepository.Add(user); _UserProfileRepository.Save(); return RedirectToAction("Index", "Home"); } model.Gender = _GenderRepository.GetAll().Select(x => new SelectListItem { Value = x.ID.ToString(), Text = x.DESCRIPTION }); return View(model); } 

该错误意味着Model.Gender值为null (因此DropDownListFor()方法期望第一个参数是IEnumerable

在您的情况下,当您提交表单并且ModelState无效时,您返回视图并且没有为Model.Gender分配值(因此它为null并且抛出了excption。

确保在返回视图之前在POST方法中重新分配Model.Gender的值(就像在GET方法中一样)。

这可能是“性别”之间的问题:

 [Display(Name="Gender")] public int GenderID { get; set; } public IEnumerable Gender { get; set; } 

如果我记得很清楚,MVC会尝试自动映射字段。 尝试在IEnumerable GenderEnumeration重命名(Name="GenderID")IEnumerable Gender中的(Name="Gender")