【问题标题】:There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key '****'. [duplicate]没有具有键“****”的“IEnumerable<SelectListItem>”类型的 ViewData 项。 [复制]
【发布时间】:2014-12-03 05:18:20
【问题描述】:

我正在尝试在学生索引页面上做一个学生注册的下拉列表。

学生监督:

public ActionResult Index(string studentEnrollment, string sortOrder, string currentFilter, string searchString, int? page)
        {
            ViewBag.CurrentSort = sortOrder;
            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";

            if (searchString != null)
            {
                page = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            ViewBag.CurrentFilter = searchString;

            var students = studentService.GetAll();

            //var students = from s in studentService.GetAll()
            //               select s;

            var studentViewModel = Mapper.Map<IEnumerable<Student>, IEnumerable<StudentViewModel>>(students);

            if (!String.IsNullOrEmpty(searchString))
            {
                students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper())
                                       || s.FirstMidName.ToUpper().Contains(searchString.ToUpper()));
            }
            switch (sortOrder)
            {
                case "name_desc":
                    students = students.OrderByDescending(s => s.LastName);
                    break;
                case "Date":
                    students = students.OrderBy(s => s.EnrollmentDate);
                    break;
                case "date_desc":
                    students = students.OrderByDescending(s => s.EnrollmentDate);
                    break;
                default:
                    students = students.OrderBy(s => s.LastName);
                    break;
            }

            List<Course> courses = new List<Course>();

            SelectList studentEnrollment = new SelectList(courses, "CourseID", "Title");

            ViewBag.Courses = studentEnrollment;

            //if (!string.IsNullOrEmpty(studentEnrollment))
            //    students = students.Where(m => m.Course.Title == studentEnrollment);

            int pageSize = 3;
            int pageNumber = (page ?? 1);

           return View(students.ToPagedList(pageNumber, pageSize));
        }

查看:

    @using (Html.BeginForm("Index", "Student", FormMethod.Get))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <p>
        Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)

        Enrollment: @Html.DropDownList("Course", (IEnumerable<SelectListItem>)ViewBag.Courses, "Select Course")

        <input type="submit" value="Filter" />
    </p>
}

行错误: 注册:@Html.DropDownList("Course", (IEnumerable)ViewBag.Courses, "Select Course")

我做错了什么?

【问题讨论】:

  • 尝试在视图中映射到 SelectList 而不是 IEnumerable,当 SelectList 继承自 IEnumerable 时也是如此。我用谷歌搜索了它,有人告诉它,它有效。

标签: asp.net-mvc-4


【解决方案1】:

我看到很多问题,人们对下拉列表有问题,这是因为视图包。我所看到的一切都表明您应该尽量避免将 ViewBag 用于下拉菜单。我建议将您的列表放入您的视图模型中。

Public List<SelectListItem> CourseList { get; set; }

我没有在您的代码中看到您填充课程列表的位置。在您的控制器上而不是设置 viewbag 上设置此参数。类似的东西

foreach(var temp in CourseList){ //Course list being pulled from the database or wherever that data exists
    model.CourseList.Add(new SelectListItem{ Text = temp.Name, Value = temp.Value });
}

然后在您的视图中,您的下拉列表将更改为

@Html.DropDownList("Course", Model.CourseList, "Select Course")

【讨论】:

  • 我试过了,可惜还是不行
  • 您可以发布您更改的代码吗?让我知道您遇到了什么错误以及发生在什么时候
  • CS1061:“PagedList.IPagedList”不包含“CourseList”的定义,并且没有扩展方法“CourseList”接受“PagedList.IPagedList' 可以找到(您是否缺少 using 指令或程序集引用?)
  • 我认为我做错了我会发布你更改的代码我相信你会发现一个错误。
  • foreach (var item in CourseList) { //从数据库中提取的课程列表或任何数据存在的地方 students.Select(x => x.CourseList.Add(new SelectListItem { Text = item.名称,值 = item.Value })); }
猜你喜欢
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-26
  • 2020-06-28
  • 2020-08-20
  • 2011-02-20
相关资源
最近更新 更多