为了账号安全,请及时绑定邮箱和手机立即绑定

具有键“XXX”的ViewData项的类型为“System.Int32”

具有键“XXX”的ViewData项的类型为“System.Int32”

慕后森 2019-05-23 10:11:29
具有键“XXX”的ViewData项的类型为“System.Int32”我有以下视图模型public class ProjectVM{     ....     [Display(Name = "Category")]     [Required(ErrorMessage = "Please select a category")]     public int CategoryID { get; set; }     public IEnumerable<SelectListItem> CategoryList { get; set; }     ....}和以下控制器方法创建一个新项目并分配一个 Categorypublic ActionResult Create(){     ProjectVM model = new ProjectVM     {         CategoryList = new SelectList(db.Categories, "ID", "Name")     }     return View(model);}public ActionResult Create(ProjectVM model){     if (!ModelState.IsValid)     {         return View(model);     }     // Save and redirect}并在视图中@model ProjectVM....@using (Html.BeginForm()){     ....     @Html.LabelFor(m => m.CategoryID)     @Html.DropDownListFor(m => m.CategoryID, Model.CategoryList, "-Please select-")     @Html.ValidationMessageFor(m => m.CategoryID)     ....     <input type="submit" value="Create" />}视图显示正确但在提交表单时,我收到以下错误消息InvalidOperationException:具有键“CategoryID”的ViewData项的类型为“System.Int32”,但必须是“IEnumerable <SelectListItem>”类型。使用该@Html.DropDownList()方法会发生相同的错误,如果我使用ViewBag或传递SelectList ViewData。
查看完整描述

4 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

根据斯蒂芬的回答,这可能很有用:

@Html.DropDownListFor(m => m.CategoryID, Model.CategoryList ?? new List<SelectListItem>(), "-Please select-")

或在ProjectVM中:

public class ProjectVM{
    public ProjectVM()
    {
        CategoryList = new List<SelectListItem>();
    }
    ...}


查看完整回答
反对 回复 2019-05-23
?
墨色风雨

TA贡献1853条经验 获得超6个赞

最可能导致某种错误重定向到您的页面,而您又没有再次初始化模型的下拉列表。

确保在模型的构造函数中或每次将所述模型发送到页面之前初始化下拉列表。

否则,您需要通过视图包或隐藏值助手维护下拉列表的状态。


查看完整回答
反对 回复 2019-05-23
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

我有同样的问题,当我试图发布表单时,我得到了一个无效的ModelState。对我来说,这是因为将CategoryId设置为int,当我将其更改为字符串时,ModelState有效且Create方法按预期工作。


查看完整回答
反对 回复 2019-05-23
  • 4 回答
  • 0 关注
  • 1320 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信