如何修复无法转换类型错误? [英] How can I fix the cannot convert type error?

查看:45
本文介绍了如何修复无法转换类型错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建关于电影的详细信息页面,但出现此错误并且有点卡住了.我收到无法转换类型错误.我确实理解错误,但我不知道如何修复它.

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.

这是 PAP 实体是数据库实例的索引:

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);
    }

我不断收到关于db.MoviesData.Find(Id);"的错误

I keep getting the error on the "db.MoviesData.Find(Id);"

这是 MovieViewModel 代码:

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; }
}

这是剃刀页面:

@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'

Cannot implicitly convert type 'WebApplication3.Models.MoviesData' to 'WebApplication3.Models.MovieViewModel'

MoviesData 是数据库的表

The MoviesData is the database's table

推荐答案

在你的 ActionResult Details 方法中 db.MoviesData.Find(Id) 返回类型为 WebApplication3.Models.MoviesData 但你的变量类型是 MovieViewModel.这就是您遇到异常的原因.

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);
}

这篇关于如何修复无法转换类型错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆