Ошибка MVC. Элемент модели, переданный в словарь, имеет тип "System.Collections.Generic.List`

Я не могу понять, что происходит с этой ошибкой:

Элемент модели, переданный в словарь, имеет тип "System.Collections.Generic.List1 [RepositoryExample.Employee]", но для этого словаря требуется элемент модели типа "RepositoryExample.Models.IEmployeeManagerRepository".

Я получаю сообщение об ошибке, когда перехожу к представлению Index. Я добавил индексный указатель с контроллера, но в нем нет кода. Я использую Linq для 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();     
    }
}

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

Любые идеи, что я делаю неправильно? Я пытаюсь следовать примеру шаблона репозитория в этом учебнике: http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs.

Ответ 1

В верхней части вашего представления Index.cshtml замените:

@model RepositoryExample.Models.IEmployeeManagerRepository

с:

@model IEnumerable<RepositoryExample.Employee>

Метод _repository.ListEmployees() возвращает IEnumerable<Employee> и то, что вы просматриваете здесь:

return View(_repository.ListEmployees());

Итак, тип, который вы должны использовать в директиве @model в своем представлении.

Ответ 2

У меня тоже есть эта проблема, но я не хочу показывать свою модель, я хочу вставить некоторую информацию из базы данных в MVC, я пробовал ее с частичным представлением, и я тоже получил эту ошибку. Когда я преобразую этот "@model projectName.ViewModel.ModelClass" в комментарий, моя ошибка решится, но я хочу использовать его как модальный, и мне нужно его как частичное представление... есть кто-то, кто ответит мне и поможет мне?