2015-12-15 33 views
1

当我尝试提交/发布数据时发生该错误...有人可以请帮我试过每篇文章,但他们没有帮助我。我是新来的MVC ...任何帮助将被授予 这里是我的代码...具有键“GenderID”的ViewData项目类型为“System.Int32”,但必须是“IEnumerable <SelectListItem”类型的'

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异常:该ViewData的具有键'GenderID'的项目类型为'System.Int32',但必须为'IEnumerable'类型'<SelectListItem>'。

在这里,我想这.... // POST:/用户配置/创建/

[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); 
    } 
+0

添加您的堆栈跟踪或至少指出引发异常的位置。 –

+0

在View中引发异常@ Html.DropDownListFor(model => model.GenderID,Model.Gender,“从列表中选择”,新的{@class =“form-control”}) –

+0

我很确定你'将错误的参数传递给'DropDownListFor'函数。我认为你应该在那里创建一个新的SelectList ... –

回答

0

错误意味着Model.Gendernull(作为结果的DropDownListFor()方法预计,第一个参数是IEnumerable<SelectListItem>

在你的情况,当你提交表单和ModelState是无效的,返回的观点,并没有分配一个值Model.Gender(因此它是null和excption被抛出。

确保您重新分配在v在返回视图之前,POST方法中的Model.Gender的线索(就像您在GET方法中所做的一样)。

+0

我重新分配Model.Gender的值在我的POST方法,但它没有工作... –

+0

当然,它的工作原理。编辑您的问题以添加您尝试的新代码,以便我可以更正它。 –

+0

我回滚了你的修改(你不能改变原来的问题 - 答案和评论就没有意义了)。相反,将你试过的新代码添加到你的问题的最后。 –

0

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

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

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

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

+0

我做了但仍然出现同样的错误 –

相关问题