2011-09-27 13 views
11

मैं समझ नहीं क्या इस त्रुटि के साथ हो रहा है:MVC त्रुटि - मॉडल आइटम शब्दकोश में पारित कर दिया प्रकार का है 'System.Collections.Generic.List`

The model item passed into the dictionary is of type 'System.Collections.Generic.List1[RepositoryExample.Employee]', but this dictionary requires a model item of type 'RepositoryExample.Models.IEmployeeManagerRepository'.`

मैं त्रुटि जब मिल मैं इंडेक्स व्यू पर जाता हूं। मैंने नियंत्रक से इंडेक्स व्यू जोड़ा लेकिन इसमें कोई कोड नहीं है। मैं लिंक से एसक्यूएल का उपयोग कर रहा हूँ।

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

IEmploy:

@model RepositoryExample.Models.IEmployeeManagerRepository 

@{ 
ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

यह मेरा कोड है eeManagerRepository.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

उत्तर

15

अपने Index.cshtml दृश्य के शीर्ष में बदल देते हैं:

साथ
@model RepositoryExample.Models.IEmployeeManagerRepository 

:

@model IEnumerable<RepositoryExample.Employee> 

_repository.ListEmployees() विधि रिटर्न IEnumerable<Employee> और वह है क्या आप दृश्य यहाँ करने के लिए गुजर रहे है:

return View(_repository.ListEmployees()); 

तो यह वह प्रकार है जिसका उपयोग आपकोमें करना चाहिएआपके विचार में निर्देश।

+0

ठीक है, मैंने ऐसा किया लेकिन अब मुझे एक नई त्रुटि मिलती है: विवरण: इस अनुरोध की सेवा के लिए आवश्यक संसाधन के संकलन के दौरान एक त्रुटि हुई। कृपया निम्नलिखित विशिष्ट त्रुटि विवरणों की समीक्षा करें और अपने स्रोत कोड को उचित रूप से संशोधित करें। कंपाइलर त्रुटि संदेश: CS0234: नाम या नामस्थान नाम 'कर्मचारी' नामस्थान 'रिपोजिटरीएक्स नमूना। मॉडल' में मौजूद नहीं है (क्या आप एक असेंबली संदर्भ खो रहे हैं?) – MikeB55

+0

@ माइकब 55, ठीक है, सही नेमस्पेस का उपयोग करें जहां यह 'कर्मचारी वर्ग परिभाषित किया गया है। '@model IEnumerable '। मैंने अपना जवाब अपडेट कर लिया है। –

+0

उत्कृष्ट। बहुत बहुत धन्यवाद। मैं पिछले 3 घंटों से इस त्रुटि की खोज कर रहा हूं। जैसा कि आपने सुझाव दिया है, मुझे @model IEnumerable जोड़कर इसे अभी काम करने के लिए मिला है। – MikeB55