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>