2017-02-02 4 views
1

プロジェクトの一部としてASP .NET Webアプリケーションチュートリアルを実行していますが、エラーメッセージが表示されていますこの投稿のタイトル'SelectedDepartment'というキーを持つ 'IEnumerable <SelectListItem>'タイプのViewDataアイテムはありません

[コース]ページでドロップダウンメニューを表示して、コースの部門を選択しようとしています。私はGenericRepositoryUnitOfWorkのクラスで作業を開始する前にenter image description here

それは罰金働いていました。私はこのコードを私のViews/Course/Index.cshtmlにコメントしなければなりません。

@using (Html.BeginForm()) 
{ 

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

今、私はチュートリアルに従ってViewResult Indexコードを持っています。

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

そして私は、私は変更することが必要になる場合がありPopulateDepartmentsDropDownList方法を、持っているが、私はそれで遊んでてきた私のCourseControllerでリポジトリ

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()); 
} 

を行う前に、こののActionResult Indexメソッドを持っていましたこれまでのところ成功していません。

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

私はActionResultの代わりにIndexメソッドのViewResultを持っています。 – Truecolor

+0

だから、ViewResultは 'ViewBag.DepartmentID'を宣言しています –

答えて

0

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

ドロップダウンリストの名前をSelectedDepartmentに指定していますが、アクションにはViewBag.DepartmentIDにはSelectListオブジェクトが含まれています。表示されているSelectListが表示されていないので、DropDownListがのSelectedDepartmentのDropDownListヘルパーメソッドのデフォルトの動作であるドロップダウンリストの項目について探しています。

あなたはあなたのようなのDropDownListヘルパーにViewBag.DepartmentIDを使用する必要があります:私はちょうどフィルターを含めるようにコントローラで自分のGetメソッド(Indexメソッド)を編集する必要がありました

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

' 'すべて '' 'say' 'の文字列が' Systems.Collections.Generic.IEnumerable 」 '

選択部:@ Html.DropDownList( "SelectedDepartment"、 "すべて"、SelectListのようViewBag.DepartmentID) の

' – Truecolor

+0

提供されたOPが彼のアクションではないC#コード..ドロップダウンリストを設定するメソッド。 –

+0

また、2つの文字列を含むことができる 'Html.DropDownList'のためのオーバーロードされたメソッドはありません。 "All"の前に置くよ。 –

関連する問題