C# 没有“IEnumerable”类型的ViewData项具有键“Grades”

C# 没有“IEnumerable”类型的ViewData项具有键“Grades”,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我收到此错误。没有具有键“Grades”的“IEnumerable”类型的ViewData项。该列表在控制器中填充,而不是从模型或数据库填充 填充列表的标准方法是什么?我应该创建一个模型类,还是向数据库中添加一个新表,还是保留我现在使用的方法 dropdownlist填充正确,当我在表单上按submit时出现错误 观点: @Html.DropDownList("Grades", ViewBag.Grades as SelectList, "Select") 控制器: [HttpGet]

我收到此错误。没有具有键“Grades”的“IEnumerable”类型的ViewData项。该列表在控制器中填充,而不是从模型或数据库填充

填充列表的标准方法是什么?我应该创建一个模型类,还是向数据库中添加一个新表,还是保留我现在使用的方法

dropdownlist填充正确,当我在表单上按submit时出现错误

观点:

@Html.DropDownList("Grades", ViewBag.Grades as SelectList, "Select")
控制器:

 [HttpGet]
    public ActionResult Register()
    {
        List<SelectListItem> grades = new List<SelectListItem>
        {
            new SelectListItem {Text = "High School", Value = "High School"},
            new SelectListItem {Text = "College/University", Value = "College/University"},
            new SelectListItem {Text = "Masters", Value = "Masters"},
            new SelectListItem {Text = "None", Value = "None"},
            new SelectListItem {Text = "Other", Value = "Other"}
        };

        ViewBag.Grades = grades;
        //ViewData["Grades"] = grades;
        return View();
    }

  [HttpPost]
    public ActionResult Register(Models.User user, string grade)
    {

        try
        {
            if (ModelState.IsValid)
            {

                using (var db = new login.Models.ShareNotesEntities())
                {

                    newUser.Grade = grade;

                    db.Users.Add(newUser);
                    db.SaveChanges();

                    return RedirectToAction("Index", "Home");
                }
            }
            else
            {
                ModelState.AddModelError("", "Error");
            }
        }
  }

当post模型为invalid ModelState.IsValid==false时,它会命中post,但不会重定向。我假设代码中还包含一个返回视图。您需要重新填充ViewBag.Grades

把人口拉到一个私有函数,或者如果你有一个模型就更好了

function PopupulateViewBag() {
    List<SelectListItem> grades = new List<SelectListItem>
    {
        new SelectListItem {Text = "High School", Value = "High School"},
        new SelectListItem {Text = "College/University", Value = "College/University"},
        new SelectListItem {Text = "Masters", Value = "Masters"},
        new SelectListItem {Text = "None", Value = "None"},
        new SelectListItem {Text = "Other", Value = "Other"}
    };

    ViewBag.Grades = grades;
}

然后,在失败后从HttpGet和HttpPost方法调用该方法。

您是在最初的get页面上收到此错误,还是仅在Post之后收到此错误?请签出,因为返回表单时,ViewBag.Grades为空。您需要重新分配SelectList。但不要按照上面建议的链接进行操作,即将SelectList命名为与您的属性相同的名称。如果您认为所选选项是空的,则帖子中的字符串级别将始终为空。为什么你有参数模型。用户用户当你甚至不使用用户的值时?我使用用户,但我取出了这个问题不需要的代码。