2017-02-02 51 views
1

我正在做ASP .NET Web应用程序教程作为项目的一部分,并且我遇到了错误消息这篇文章的标题没有类型为'IEnumerable <SelectListItem>'的ViewData项目具有关键字'SelectedDepartment'

我想在课程页面显示一个下拉菜单来选择所选课程的一个部门。 enter image description here

这是工作的罚款之前,我开始与GenericRepository的UnitOfWork类的工作。我必须在我的Views/Course/Index.cshtml以下注释掉以下代码,以便课程页面能够正常工作。

@using (Html.BeginForm()) 
{ 

    @*<p> 
     Select Department: @Html.DropDownList("SelectedDepartment", "All") 
     <input type="submit" value="Filter" /> 
    </p>*@ 
} 

现在我有一个ViewResult索引代码根据教程。

public ViewResult Index() 
{ 
    var courses = unitOfWork.CourseRepository.Get(includeProperties: "Department"); 
    return View(courses.ToList()); 
} 

我做库

public ActionResult Index(int? SelectedDepartment) 
{ 
    var departments = db.Departments.OrderBy(q => q.Name).ToList(); 
    ViewBag.SelectedDepartment = new SelectList(departments, "DepartmentID", "Name", SelectedDepartment); 
    int departmentID = SelectedDepartment.GetValueOrDefault(); 

    IQueryable<Course> courses = db.Courses 
     .Where(c => !SelectedDepartment.HasValue || c.DepartmentID == departmentID) 
     .OrderBy(d => d.CourseID) 
     .Include(d => d.Department); 
    //var sql = courses.ToString(); 
    return View(courses.ToList()); 
} 

在我CourseController我有一个PopulateDepartmentsDropDownList方法,其中可能需要改变以前出现过此的ActionResult指数方法,但我一直在玩了,但到目前为止还没有成功。

private void PopulateDepartmentsDropDownList(object selectedDepartment = null) 
{ 
    var departmentsQuery = unitOfWork.DepartmentRepository.Get(orderBy: q => q.OrderBy(d => d.Name)); 

    ViewBag.DepartmentID = new SelectList(departmentsQuery, "DepartmentID", "Name", selectedDepartment); 
} 

请解决此问题的任何提示。

+0

你可以发布你的这个视图的操作方法吗? 'Index ActionResult'具体为 –

+0

我有一个ViewResult的Index方法而不是ActionResult。 – Truecolor

+0

所以在ViewResult是你声明'ViewBag.DepartmentID'的地方 –

回答

0

我只是在Controller编辑我的Get方法(Index方法),包括过滤器。

bool hasValue = SelectedDepartment.HasValue; 
var courses = courseService.ListCourses(hasValue,departmentID); 
1

您正在指定DropDown列表的名称为SelectedDepartment,但在您的操作中您有ViewBag.DepartmentID,它持有SelectList对象。您没有在视图中使用填充的SelectList,因此发生的情况是DropDownList正在查看ViewBag中的SelectedDepartment关键字,其DropDown列表项将填充,这是DropDownList帮助器方法的默认行为。

您需要使用ViewBag.DepartmentID在你的DropDownList帮手,如:

@Html.DropDownList("selectedDepartment","All",ViewBag.DepartmentID as SelectList) 
+0

它有''所有“'说”下的红色错误行不能从'字符串'转换为'Systems.Collections.Generic.IEnumerable ”'

选择部门:@ Html.DropDownList( “SelectedDepartment”, “全部”,作为ViewBag.DepartmentID的SelectList)

' – Truecolor

+0

OP提供的C#代码不是他的动作..只是一个方法来填充下拉列表.. –

+0

也没有重载的方法'Html.DropDownList',可以包含2个字符串,然后选择列表..选择列表应该被放置在“全部”之前 –

相关问题