Я хочу создать страницу сведений о фильме, но получаю эту ошибку, и я как бы застрял. Я получаю ошибку типа не могу преобразовать. Я понимаю ошибку, но не знаю, как ее исправить.
Это индекс, в котором объекты PAP являются экземпляром базы данных:
public class MoviesController : Controller
{
PAPEntities db = new PAPEntities();
public ActionResult Index()
{
MovieViewModel[] movies = db.MoviesData.Select(movie => new MovieViewModel
{
MovieID = movie.MovieID,
MovieName = movie.MovieName,
MovieDescription = movie.MovieDescription,
MovieCategory = movie.MovieCategory,
MovieYear = movie.MovieYear
}).ToArray();
return View(movies);
}
И это мой класс деталей на данный момент:
public ActionResult Details(int Id = 1)
{
MovieViewModel MovieVM = db.MoviesData.Find(Id);
return View(MovieVM);
}
Я продолжаю получать сообщение об ошибке "db.MoviesData.Find(Id);"
Это код MovieViewModel:
public class MovieViewModel
{
public int MovieID { get; set; }
public string MovieName { get; set; }
public string MovieDescription { get; set; }
public string MovieCategory { get; set; }
public string MovieYear { get; set; }
}
Это страница бритвы:
@model WebApplication3.Models.MovieViewModel[]
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Movies</h2>
<p>
@Html.ActionLink("Create New", "Create")
<table class = "table table-bordered table-responsive table-hover">
<tr>
<th><b>Movie Name </b></th>
<th><b>Movie Category </b></th>
<th><b>Movie Year </b></th>
<th><b>Movie Description </b></th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>@item.MovieID</td>
<td>@item.MovieCategory</td>
<td>@item.MovieYear</td>
<td>@item.MovieDescription</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.MovieID }) |
@Html.ActionLink("Details", "Details", new { id = item.MovieID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.MovieID })
</td>
</tr>
}
</table>
Это ошибка:
Cannot implicitly convert type 'WebApplication3.Models.MoviesData' to 'WebApplication3.Models.MovieViewModel'
MoviesData - это таблица базы данных
В Index()
вы делаете new MovieViewModel { ... }
. Вам также нужно сделать это в Details()
.
@CodeNotFound, я ответил себе страницей бритвы
@DiogoTeixeira, вы должны удалить. Я добавил вид бритвы к вопросу :)
Вы должны сопоставить свою модель БД (MoviesData
) с бизнес-моделью (MovieViewModel
)
public ActionResult Details(int Id = 1)
{
MoviesData movie = db.MoviesData.Find(Id);
MovieViewModel MovieVM = new MovieViewModel();
MovieVM.MovieID = movie.MovieID;
MovieVM.MovieName = movie.MovieName;
MovieVM.MovieDescription = movie.MovieDescription;
MovieVM.MovieCategory = movie.MovieCategory;
MovieVM.MovieYear = movie.MovieYear;
return View(MovieVM);
}
Я пробовал, и появляется ошибка: «Название «фильм» не отображается в текущем контексте». Мне нужно что-то изменить?
В вашем методе ActionResult Details
db.MoviesData.Find(Id)
возвращает объект типа WebApplication3.Models.MoviesData
, но тип вашей переменной — MovieViewModel
. Вот почему вы получаете исключение.
Вам нужно лить вручную. Итак, вы можете кодировать так,
public ActionResult Details(int Id = 1)
{
MoviesData movie = db.MoviesData.Find(Id);
MovieViewModel MovieVM = new MovieViewModel{
MovieID = movie.MovieID,
MovieName = movie.MovieName,
MovieDescription = movie.MovieDescription,
MovieCategory = movie.MovieCategory,
MovieYear = movie.MovieYear
};
return View(MovieVM);
}
Покажите нам страницу с бритвой, пожалуйста.