Как я могу исправить ошибку типа преобразования не может? - PullRequest
0 голосов
/ 27 мая 2019

Я хочу создать страницу с подробной информацией о фильме, но я получаю эту ошибку, и я немного застрял. Я получаю ошибку преобразования типа. Я понимаю ошибку, но понятия не имею, как ее исправить.

Это индекс, который объекты 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>

Это ошибка:

Невозможно неявно преобразовать тип 'WebApplication3.Models.MoviesData' в 'WebApplication3.Models.MovieViewModel'

MoviesData - это таблица базы данных

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Вы должны сопоставить свою модель DB (MoviesData) с моделью Bussiness (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);
    }
0 голосов
/ 27 мая 2019

В вашем 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...