2011-09-27 43 views
11

我想不通這是怎麼回事,出現此錯誤:MVC錯誤 - 傳遞到字典的模型項的類型爲「System.Collections.Generic.List`

The model item passed into the dictionary is of type 'System.Collections.Generic.List1[RepositoryExample.Employee]', but this dictionary requires a model item of type 'RepositoryExample.Models.IEmployeeManagerRepository'.`

我得到的錯誤時,我進入索引視圖。我從控制器添加了索引視圖,但沒有代碼。我正在使用Linq to SQL。

@model RepositoryExample.Models.IEmployeeManagerRepository 

@{ 
ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

這是我的代碼:

EmployeeController.cs

// GET: /Employee/ 
    public ActionResult Index() 
    { 
     return View(_repository.ListEmployees()); 
    } 

LinqEmployeeManagerRepository.cs

public class LinqEmployeeManagerRepository: RepositoryExample.Models.IEmployeeManagerRepository 
{ 
    private DeptDirectoryDataClassesDataContext _db = new DeptDirectoryDataClassesDataContext(); 

    public Employee GetEmployee(string UserName) 
    { 
     return (from e in _db.Employees where e.UserName == UserName select e).FirstOrDefault(); 
    } 

    public IEnumerable<Employee> ListEmployees() 
    { 
     return _db.Employees.ToList(); 
    } 

    public Employee CreateEmployee(Employee employeeToCreate) 
    { 
     _db.Employees.InsertOnSubmit(employeeToCreate); 
     _db.SubmitChanges(); 
     return employeeToCreate; 
    } 

    public Employee EditEmployee(Employee employeeToEdit) 
    { 
     var OriginalEmployee = GetEmployee(employeeToEdit.UserName); 
     _db.Employees.Attach(employeeToEdit, OriginalEmployee); 
     _db.SubmitChanges(); 
     return employeeToEdit; 
    } 

    public void DeleteEmployee(Employee employeeToDelete) 
    { 
     var OriginalEmployee = GetEmployee(employeeToDelete.UserName); 
     _db.Employees.DeleteOnSubmit(OriginalEmployee); 
     _db.SubmitChanges();  
    } 
} 

IEmploy eeManagerRepository.cs

namespace RepositoryExample.Models 
{ 
    public interface IEmployeeManagerRepository 
    { 
     Employee CreateEmployee(Employee employeeToCreate); 
     void DeleteEmployee(Employee employeeToDelete); 
     Employee EditEmployee(Employee employeeToUpdate); 
     Employee GetEmployee(string UserName); 
     IEnumerable<Employee> ListEmployees(); 
    } 
} 

任何想法我做錯了什麼?我試圖按照本教程中的Repository模式示例:http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs

回答

15

在你Index.cshtml視圖的頂部更換:

@model RepositoryExample.Models.IEmployeeManagerRepository 

有:

@model IEnumerable<RepositoryExample.Employee> 

_repository.ListEmployees()方法返回IEnumerable<Employee>,這就是要傳遞到視圖這裏是什麼:

return View(_repository.ListEmployees()); 

這就是你應該在中使用的類型指令在您的視圖中。

+0

好吧,我這樣做,但現在我得到一個新的錯誤:描述:在編譯服務此請求所需的資源編譯過程中發生錯誤。請查看以下具體的錯誤細節並適當修改您的源代碼。 編譯器錯誤消息:CS0234:名稱空間'RepositoryExample.Models'中不存在類型或名稱空間名稱'Employee'(缺少程序集引用嗎?) – MikeB55

+0

@ MikeB55,好的,使用正確的命名空間,其中此'Employee '類被定義。 '@model IEnumerable '。我已經更新了我的答案。 –

+0

優秀。非常感謝。過去3個小時我一直在尋找這個錯誤。按照您的建議,通過添加@model IEnumerable 來解決問題。 – MikeB55

相關問題