1

I am still very new to MVC. I am trying to display all of the employees in my Employees table. I have created an EmployeeView model, and then an EmployeesView model that has an IEnumerable of EmployeeView. In Employee Manager I get all of the employees and return it as an IEnumerable. In the controller I put that list into the model. I created ViewEmployees based on the EmployeesView model.

Whenever I try to iterate through the employees, I have to create a new foreach loop, I'm unsure why. Also, I get this error when I run the application:

The model item passed into the dictionary is of type 'Project_Tracking_MVC_Training.Models.ViewModel.EmployeesView', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Project_Tracking_MVC_Training.Models.ViewModel.EmployeesView]'.

I am unsure as to how to fix this.


EmployeeModel.cs:

namespace Project_Tracking_MVC_Training.Models.ViewModel
{
    public class EmployeeView
    {
        [Key]
        public int PK_EmployeeID { get; set; }

        [Required]
        [Display(Name = "Employee Type")]
        public int FK_EmployeeTypeID { get; set; }

        [Required]
        [Display(Name = "Employee First Name")]
        public string FirstName { get; set; }

        [Required]
        [Display(Name = "Employee Last Name")]
        public string LastName { get; set; }

        [Required]
        [Display(Name = "Is Active")]
        public bool IsActive { get; set; }
    }


    public class EmployeesView
    {
        public IEnumerable<EmployeeView> Employees {get; set;}
    }
}

EmployeeManager.cs:

namespace Project_Tracking_MVC_Training.Models.EntityManager
{
    public class EmployeeManager
    {

        public static IEnumerable<EmployeeView> GetAllEmployees()
        {
            using (ProjectTrackingEntities1 db = new ProjectTrackingEntities1())
            {
                var emp = db.Employees.Select(o => new EmployeeView
                {
                    PK_EmployeeID = o.PK_EmployeeID,
                    FK_EmployeeTypeID = o.FK_EmployeeTypeID,
                    FirstName = o.FirstName,
                    LastName = o.LastName,
                    IsActive = o.IsActive
                }).ToList();

                return emp;
            }
        }
    }
}

EmployeeController.cs

namespace Project_Tracking_MVC_Training.Controllers
{
    public class EmployeeController : Controller
    {
        public ActionResult ViewEmployees()
        {
            EmployeesView model = new EmployeesView();

            model.Employees = EmployeeManager.GetAllEmployees();
            return View(model);
        }
    }
}

ViewEmployees.cshtml:

@model IEnumerable<Project_Tracking_MVC_Training.Models.ViewModel.EmployeesView>

@{
    ViewBag.Title = "ViewEmployees";
}

<h2>ViewEmployees</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>Employee ID</th>
        <th>Actions</th>
    </tr>

@foreach (var item in Model) {
    foreach (var emp in item.Employees)
    {
        <tr>
            <td>@emp.PK_EmployeeID</td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
        </tr>

    }
}

</table>
DForck42
  • 19,789
  • 13
  • 59
  • 84

0 Answers0