【发布时间】:2016-10-24 19:56:03
【问题描述】:
我们如何使用以下两个属性填充 ViewModel:
- 来自 LINQ 查询的
query result type仅返回一条记录 -
SelectList类型
换句话说,假设我们有一个基于所选 ID 仅显示单个电影的视图。并且我们想从年份的下拉列表中为该电影指定发行年份,如何在下面的 ViewModel 和 Controller 中填写 ?????
注意:在以下 ViewModel 中,如果我使用 IQueryable<Movie> 类型的 myMovie 属性并将 ViewModel 的此属性分配给来自以下控制器的查询 qrySingleMovie,我会收到错误 the name qrySingleMovie does not exist in the current context
模型
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
public class Year
{
public int YearId {get; set;}
public int MovieYear {get; set;}
}
视图模型
public class MovieGenreViewModel
{
public ???? myMovie;
public SelectList MovieReleaseYears;
public int ReleasedYr { get; set; }
}
控制器
public async Task<IActionResult> Index(int MovieID)
{
// Use LINQ to get list of Release years.
IQueryable<string> YearQuery = from m in _context.Years
orderby m.MovieYear
select m.MovieYear;
//Following query selects only a single movie based on Primary Key ID
var qrysingleMovie = from m in _context.Movies
where m.ID == movieID
select m;
var movieReleaseYrVM = new MovieGenreViewModel();
movieReleaseYrVM.MovieReleaseYears = new SelectList(await YearQuery.ToListAsync());
movieReleaseYrVM.myMovie = ????
return View(movieReleaseYrVM);
}
更新
在我的真实项目中,模型有很多属性,对应的View也显示了大部分属性。我在想是否有一种更简单的方法来定义一个不包含模型所有属性的 ViewModel,例如 ASP.NET Article 定义了一个视图模型 MovieGenreViewModel 但是他们正在使用 List 并且在他们的 View 中他们正在迭代多部电影。我试图模仿他们的例子,但在我的例子中,它是一个带有SelectList 的记录(不是记录列表)。我怎样才能用一条记录来模拟这种场景,并且不能在 View Model 中包含该模型所具有的大量模型属性?
【问题讨论】:
-
public Movie myMovie;和movieReleaseYrVM.myMovie = qrysingleMovie.Single();怎么样
标签: c# asp.net-mvc linq asp.net-mvc-viewmodel