2011-09-27 40 views
11

no puedo averiguar lo que está pasando con este error:error MVC - El elemento de modelo pasado en el diccionario es del tipo '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'.`

me sale el error cuando Voy a la vista de índice. Agregué la Vista de índice desde el controlador pero no hay código en ella. Estoy usando Linq para SQL.

@model RepositoryExample.Models.IEmployeeManagerRepository 

@{ 
ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

Este es mi código:

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

Alguna idea de lo que estoy haciendo mal? Estoy tratando de seguir el ejemplo en el patrón Repositorio en este tutorial: http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs.

Respuesta

15

En la parte superior de la vista Index.cshtml reemplazar:

@model RepositoryExample.Models.IEmployeeManagerRepository 

con:

@model IEnumerable<RepositoryExample.Employee> 

El método _repository.ListEmployees() devuelve IEnumerable<Employee> y eso es lo que está pasando a la vista aquí:

return View(_repository.ListEmployees()); 

Así que ese es el tipo que debería usar en el @model directiva en su punto de vista.

+0

Ok, lo hice pero ahora recibo un nuevo error: Descripción: Se produjo un error durante la compilación de un recurso requerido para atender esta solicitud. Revise los siguientes detalles de error específicos y modifique su código fuente de manera adecuada. Mensaje de error del compilador: CS0234: El tipo o el nombre del espacio de nombres 'Employee' no existe en el espacio de nombres 'RepositoryExample.Models' (¿falta una referencia de ensamblado?) – MikeB55

+0

@ MikeB55, OK, use el espacio de nombres correcto donde aparece 'Employee 'clase está definida. '@model IEnumerable '. He actualizado mi respuesta. –

+0

Excelente. Muchas gracias. He estado buscando este error durante las últimas 3 horas. Lo tengo que trabajar ahora agregando @model IEnumerable como sugirió. – MikeB55

Cuestiones relacionadas