Reputation: 91
I want to create a details page about a movie, but I´m getting this error and I´m kinda stuck. I'm getting a cant convert type error. I do understand the error, but I dont have any idea of how to fix it.
This is the Index the PAP Entities is the Database instance:
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);
}
And this is my details class for now:
public ActionResult Details(int Id = 1)
{
MovieViewModel MovieVM = db.MoviesData.Find(Id);
return View(MovieVM);
}
I keep getting the error on the "db.MoviesData.Find(Id);"
This is the MovieViewModel code:
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; }
}
This is the razor page:
@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>
This is the error:
Cannot implicitly convert type 'WebApplication3.Models.MoviesData' to 'WebApplication3.Models.MovieViewModel'
The MoviesData is the database's table
Upvotes: 0
Views: 972
Reputation: 294
You should map your DB (MoviesData
) model To Bussiness model (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);
}
Upvotes: 1
Reputation: 540
In your ActionResult Details
method db.MoviesData.Find(Id)
returns object which type is WebApplication3.Models.MoviesData
but your variable type is MovieViewModel
. That's why you are getting exception.
You need to cast manually. So, You can code like this,
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);
}
Upvotes: 0