具有键'GenderID'的ViewData项的类型为'System.Int32',但必须是'IEnumerable <selectlistitem>'类型

时间:2015-12-15 12:50:41

标签: c# asp.net-mvc

当我尝试提交/发布数据时发生错误...有人可以帮助我尝试每个帖子,但他们没有帮助我。我是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);
}

查看

<div class="form-group">
   @Html.LabelFor(model => model.GenderID, new { @class = "control-label col-md-2" })
   <div class="col-md-10">
      @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" })
   </div>
</div>

模型

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

InvalidOperationException:具有键'GenderID'的ViewData项的类型为'System.Int32',但必须是'IEnumerable&lt; SelectListItem&gt;'类型。

我试过这个...... // 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);
    }

2 个答案:

答案 0 :(得分:0)

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

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

public IEnumerable<SelectListItem> Gender { get; set; }

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

答案 1 :(得分:0)

错误表示Model.Gender的值为null(因此DropDownListFor()方法预期第一个参数为IEnumerable<SelectListItem>

在您的情况下,当您提交表单并且ModelState无效时,您将返回视图并且尚未为Model.Gender分配值(因此它是null,并且摘要为抛出。

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