В действии контроллера Payment(int id)
вы передаете одну сущность типа CarDataAccess.Car
в представление (строка в вашем коде entities.Cars.FirstOrDefault(c => c.Id == id)
получает одну сущность из базы данных).
Представление Payment
ожидает коллекцию типа IEnumerable<CarDataAccess.Car>
.Вы можете увидеть это в первой строке представления @model IEnumerable<CarDataAccess.Car>
.Измените это на @model CarDataAccess.Car
и посмотрите, решит ли это проблему.
Обновите представление следующим образом:
@model CarDataAccess.Car
@{
/**/
ViewBag.Title = "Payment";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Payment</title>
</head>
<body>
@* access model properties here *@
<span>@Model.Id</span>
</body>
</html>
В вашем контроллере тоже есть ошибка.Убедитесь, что сущность Car
не пуста, не является контекстом базы данных (entities
):
public ActionResult Payment(int id)
{
using (BookCarDBEntities entities = new BookCarDBEntities())
{
var entity = entities.Cars.FirstOrDefault(c => c.Id == id);
if (entity != null) // check if entity is null, not entities
{
return View(entity);
}
else
{
return View("Not Found");
}
}
}
Также существует другая проблема в вашем контроллере - вы объявили несколько экземпляров контекста базы данных (BookCarDBEntities
).Лучше всего заключить контекст вашей базы данных в операторы using
, как вы это делали в способе оплаты.Сделайте то же самое для метода ListCars
и удалите BookCarDBEntities db = new BookCarDBEntities();
с верхней части контроллера.Если вы заключите контекст в использование операторов, то это гарантирует, что контекст должным образом удаляется и очищается сборщиком мусора.
Метод ListCars должен выглядеть следующим образом:
public ActionResult ListCars()
{
string username = User.Identity.Name;
var cars = new List<CarDataAccess.Car>();
using (var db = new BookCarDBEntities())
{
cars = db.Cars.ToList();
}
return View(cars);
}