【问题标题】:How can I fix the cannot convert type error?如何修复无法转换类型错误?
【发布时间】:2019-10-12 19:16:21
【问题描述】:

我想创建一个关于电影的详细信息页面,但我遇到了这个错误,我有点卡住了。我收到无法转换类型错误。我确实了解该错误,但我不知道如何修复它。

这是索引,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 是数据库的表

【问题讨论】:

  • 请向我们展示剃须刀页面。
  • Index() 中,您可以使用new MovieViewModel { ... }。您还需要在Details() 中执行此操作。
  • @CodeNotFound 我用剃须刀页面回答了自己
  • @DiogoTeixeira 你应该删除。我在问题中添加了剃须刀视图:)

标签: c# sql-server asp.net-mvc razor


【解决方案1】:

您应该将您的数据库 (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);
    }

【讨论】:

  • 我试过了,它出现了错误:“名称“电影”没有出现在当前上下文中”。我需要改变什么吗?
【解决方案2】:

在您的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);
}

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 2022-01-03
    • 1970-01-01
    • 2019-09-05
    • 2019-02-26
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2020-05-09
    相关资源
    最近更新 更多