问题 MVC错误 - 传递到字典中的模型项的类型为'System.Collections.Generic.List`


我无法弄清楚这个错误发生了什么:

传递到字典中的模型项的类型为'System.Collections.Generic.List1 [RepositoryExample.Employee]',但此字典需要类型为'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();     
    }
}

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

我有什么想法我做错了吗?我试图在本教程中关注Repository模式的示例: http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs


7906
2017-09-27 17:09


起源



答案:


在你的顶部 Index.cshtml 查看替换:

@model RepositoryExample.Models.IEmployeeManagerRepository

有:

@model IEnumerable<RepositoryExample.Employee>

_repository.ListEmployees() 方法返回 IEnumerable<Employee> 这就是你在这里传递给视图的内容:

return View(_repository.ListEmployees());

这就是你应该使用的类型 @model 你的观点中的指令。


15
2017-09-27 17:10



好的,我这样做但现在我收到一个新错误:说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并相应地修改源代码。编译器错误消息:CS0234:命名空间“RepositoryExample.Models”中不存在类型或命名空间名称“Employee”(您是否缺少程序集引用?) - MikeB55
@ MikeB55,好的,在这里使用正确的命名空间 Employee 类是定义的。 @model IEnumerable<RepositoryExample.Employee>。我已经更新了我的答案。 - Darin Dimitrov
优秀。非常感谢。我在过去的3个小时里一直在寻找这个错误。我现在通过添加@model IEnumerable <RepositoryExample.Employee>按照你的建议开始工作了。 - MikeB55
@ MikeB55,如果这篇文章帮助你解决了你应该考虑的问题 将其标记为答案 点击旁边的勾号。 - Darin Dimitrov
我已经做了。之前尝试但系统告诉我一些关于等待5分钟的事情。在我能做之前。 - MikeB55


答案:


在你的顶部 Index.cshtml 查看替换:

@model RepositoryExample.Models.IEmployeeManagerRepository

有:

@model IEnumerable<RepositoryExample.Employee>

_repository.ListEmployees() 方法返回 IEnumerable<Employee> 这就是你在这里传递给视图的内容:

return View(_repository.ListEmployees());

这就是你应该使用的类型 @model 你的观点中的指令。


15
2017-09-27 17:10



好的,我这样做但现在我收到一个新错误:说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并相应地修改源代码。编译器错误消息:CS0234:命名空间“RepositoryExample.Models”中不存在类型或命名空间名称“Employee”(您是否缺少程序集引用?) - MikeB55
@ MikeB55,好的,在这里使用正确的命名空间 Employee 类是定义的。 @model IEnumerable<RepositoryExample.Employee>。我已经更新了我的答案。 - Darin Dimitrov
优秀。非常感谢。我在过去的3个小时里一直在寻找这个错误。我现在通过添加@model IEnumerable <RepositoryExample.Employee>按照你的建议开始工作了。 - MikeB55
@ MikeB55,如果这篇文章帮助你解决了你应该考虑的问题 将其标记为答案 点击旁边的勾号。 - Darin Dimitrov
我已经做了。之前尝试但系统告诉我一些关于等待5分钟的事情。在我能做之前。 - MikeB55