C# 没有“IEnumerable”类型的ViewData项具有键“Grades”
我收到此错误。没有具有键“Grades”的“IEnumerable”类型的ViewData项。该列表在控制器中填充,而不是从模型或数据库填充 填充列表的标准方法是什么?我应该创建一个模型类,还是向数据库中添加一个新表,还是保留我现在使用的方法 dropdownlist填充正确,当我在表单上按submit时出现错误 观点: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]
@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命名为与您的属性相同的名称。如果您认为所选选项是空的,则帖子中的字符串级别将始终为空。为什么你有参数模型。用户用户当你甚至不使用用户的值时?我使用用户,但我取出了这个问题不需要的代码。