【发布时间】:2014-12-03 00:19:18
【问题描述】:
我正在关注http://www.asp.net/mvc/overview/getting-started/introduction/getting-started 的 ASP.NET MVC 5 教程
本教程创建一个包含电影对象的基本数据库,其属性为标题、发行日期、流派和价格。
我有两个复选框,一个用于价格为 5 的电影,一个用于 10。
如果仅选中一个复选框,我的工作正常,但如果同时选中两个复选框(我试图列出价格为 5 的电影和价格为 10 的电影),则视图中不会显示任何内容。
我走远了吗?
型号:
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 MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; }
}
控制器:
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
public ActionResult Index(bool movieCost5 = false, bool movieCost10 = false)
{
var movies = from m in db.Movies
select m;
if (movieCost5 == true && movieCost10 == false)
{
movies = movies.Where(x => x.Price == 5);
}
else if (movieCost5 == true && movieCost10 == true)
{
movies = movies.Where(x => x.Price == 5 && x.Price == 10);
}
else if (movieCost5 == false && movieCost10 == true)
{
movies = movies.Where(x => x.Price == 10);
}
return View(movies);
}
}
【问题讨论】:
-
除了下面的答案之外,您还应该将您的
movies变量转换为IQueryable<Movie>以延迟数据库调用的执行,直到您评估了您的过滤器。就像现在一样,代码是说“获取数据库中的每一部电影并将其存储在内存中”,然后是“从符合标准 X 的内存对象中获取每一部电影”。这在较小的数据集上不会很明显,但随着它们变大,您会注意到您的代码拖了。 -
谢谢,我会试一试的。
标签: c# asp.net-mvc checkbox