【问题标题】:MVC error - The model item passed into the dictionary is of type 'System.Collections.Generic.List`MVC 错误 - 传入字典的模型项的类型为“System.Collections.Generic.List”
【发布时间】:2011-11-26 05:53:30
【问题描述】:

我不知道这个错误是怎么回事:

传入字典的模型项的类型为“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(); 
    }
}

任何想法我做错了什么?我正在尝试遵循本教程中关于存储库模式的示例:http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor ienumerable


    【解决方案1】:

    在您的Index.cshtml 视图顶部替换:

    @model RepositoryExample.Models.IEmployeeManagerRepository
    

    与:

    @model IEnumerable<RepositoryExample.Employee>
    

    _repository.ListEmployees() 方法返回 IEnumerable&lt;Employee&gt;,这就是您在此处传递给视图的内容:

    return View(_repository.ListEmployees());
    

    这就是您应该在视图中的 @model 指令中使用的类型。

    【讨论】:

    • 好的,我这样做了,但现在我收到一个新错误: 说明:在编译服务此请求所需的资源期间发生错误。请查看以下特定错误详细信息并适当修改您的源代码。编译器错误消息:CS0234:名称空间“RepositoryExample.Models”中不存在类型或名称空间名称“Employee”(您是否缺少程序集引用?)
    • @MikeB55,好的,使用定义此Employee 类的正确命名空间。 @model IEnumerable&lt;RepositoryExample.Employee&gt;。我已经更新了我的答案。
    • 优秀。太感谢了。在过去的 3 个小时里,我一直在寻找这个错误。我现在通过按照您的建议添加 @model IEnumerable 让它工作。
    • @MikeB55,如果这篇文章帮助你解决了你遇到的问题,你应该考虑marking it as answer,点击它旁边的勾号。
    • 我刚做了。之前尝试过,但系统告诉我要等待 5 分钟。在我能做到之前。
    猜你喜欢
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多