Исключение говорит само за себя! Ваше бритвенное представление строго типизировано для коллекции CareerInformation
объектов, но из вашего метода действия вы передаете другому типу представление!
В вашем методе действия переменная lstCareerInformation
представляет собой не коллекцию CareerInformation
объектов, а коллекцию анонимных объектов. Это происходит потому, что ваше выражение LINQ выполняет проекцию на анонимный объект.
select new { job.NameOfPost, job.PostName, job.StartDate,
job.LastDate, job.Eligibility, job.NoOfVacancies }
select new
создаст анонимный объект
Чтобы исправить ошибку, вы должны вернуть коллекцию CareerInformation
объектов. Просто удалите проекционную часть из выражения LINQ.
public ActionResult JobList()
{
var db = new CaliberCoachingContext();
var careerInformationList = db.CareerInformations.ToList();
return View(careerInformationList);
}
РЕДАКТИРОВАТЬ: Согласно комментарию
Я использовал анонимный объект, потому что я хочу выбрать конкретный
столбцы вместо всех столбцов из свойств CareerInformation.
Тогда вы должны использовать модель представления. Создайте класс viewmodel со свойствами, необходимыми для вашего представления.
public class JobVm
{
public string PostName { set;get;}
public Eligibility { set;get;}
public DateTime StartDate { set;get;}
// Add other properties needed by the view
}
Теперь в вашем методе действия проект создайте объекты модели представления из коллекции объектов сущностей, используя метод Select
.
public ActionResult JobList()
{
var db = new CaliberCoachingContext();
var careerInformationList = db.CareerInformations
.Select(a=> new JobVm { PostName = a.PostName,
StartDate = a.StartDate,
Eligibility = a.Eligibility })
.ToList();
return View(careerInformationList);
}
Здесь careerInformationList
- это список JobVm
объектов, и это то, что мы передаем в представление. Поэтому убедитесь, что ваше представление строго типизировано для коллекции JobVm
объектов.
@model List<JobVm>
<h2>Jobs</h2>
@foreach(var job in Model)
{
<div>@job.PostName</div>
<p>@job.Eligibility</p>
}