2015-12-15 66 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

我做了但仍然出現同樣的錯誤 –

相關問題