C# 如何修复无法转换类型错误?
我想创建一个关于电影的详细信息页面,但我遇到了这个错误,我有点卡住了。我收到一个无法转换类型错误。我确实理解这个错误,但我不知道如何修复它 这是PAP实体作为数据库实例的索引:C# 如何修复无法转换类型错误?,c#,sql-server,asp.net-mvc,razor,C#,Sql Server,Asp.net Mvc,Razor,我想创建一个关于电影的详细信息页面,但我遇到了这个错误,我有点卡住了。我收到一个无法转换类型错误。我确实理解这个错误,但我不知道如何修复它 这是PAP实体作为数据库实例的索引: public class MoviesController : Controller { PAPEntities db = new PAPEntities(); public ActionResult Index() { MovieViewModel[] movies =
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")
@model WebApplication3.Models.MovieViewModel[]
@{
ViewBag.Title=“Index”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
影视
@ActionLink(“新建”、“创建”)
电影名称
电影类别
电影年
电影描述
@foreach(模型中的var项目)
{
@项目.MovieID
@项目.电影类别
@项目.电影年
@项目.电影说明
@ActionLink(“编辑”,“编辑”,新的{id=item.MovieID})|
@ActionLink(“详细信息”,“详细信息”,新的{id=item.MovieID})|
@ActionLink(“删除”,“删除”,新的{id=item.MovieID})
}
这就是错误:
无法将类型“WebApplication3.Models.MoviesData”隐式转换为
“WebApplication3.Models.MovieViewModel”
MoviesData是数据库的表您应该将DB(MoviesData
)模型映射到业务模型(MovieViewModel
)
在您的
ActionResult Details
方法db.MoviesData.Find(Id)
中,返回类型为WebApplication3.Models.MoviesData
的对象,但变量类型为MovieViewModel
。这就是为什么你会有例外
您需要手动强制转换。所以,你可以这样编码
public ActionResult详细信息(int Id=1)
{
MoviesData movie=db.MoviesData.Find(Id);
MovieViewModel MovieVM=新的MovieViewModel{
MovieID=movie.MovieID,
MovieName=movie.MovieName,
MovieDescription=movie.MovieDescription,
MovieCategory=movie.MovieCategory,
MovieYear=movie.MovieYear
};
返回视图(MovieVM);
}
请给我们看剃须刀页面。在索引()
中,您可以新建电影视图模型{…}
。你还需要在Details()
@CodeNotFound中这样做。我用剃刀回答了自己page@DiogoTeixeira你应该删除。我在问题中添加了razor wiew:)我试过了,出现了错误:“名称“movie”不出现在当前上下文中”。我需要改变什么吗?
<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>
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);
}