具有键’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
重命名(Name="GenderID")
或IEnumerable
中的(Name="Gender")