web-dev-qa-db-ja.com

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

私が間違っていることはありますか?このチュートリアルのリポジトリパターンの例に従っています: http://www.asp.net/mvc/tutorials/iteration-4-make-the-application-loosely-coupled-cs =。

12
MikeB55

_Index.cshtml_ビューの上部を置き換えます。

_@model RepositoryExample.Models.IEmployeeManagerRepository
_

と:

_@model IEnumerable<RepositoryExample.Employee>
_

_repository.ListEmployees()メソッドは_IEnumerable<Employee>_を返します。これがビューに渡すものです。

_return View(_repository.ListEmployees());
_

これが、ビューの_@model_ディレクティブで使用するタイプです。

15
Darin Dimitrov