Ошибка 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" в комментарий, моя ошибка решится, но я хочу использовать его как модальный, и мне нужно его как частичное представление... есть кто-то, кто ответит мне и поможет мне?