以下代码取自教程:http ://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examineing-the-edit-methods-and-edit-view显示如何使用 ASP.net MVC 3 来管理电影数据库。
在教程中,将一个列表对象添加到包含数据库中存在的每种电影类型的控制器类中。然后将该列表传递到视图中的下拉列表,使数据库能够按流派搜索。
控制器:(与电影类型相关的代码以粗体显示)
public ActionResult SearchIndex(string movieGenre, string searchString)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (string.IsNullOrEmpty(movieGenre))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == movieGenre));
}
}
我想做的是进一步增强这一点,以便可以按价格和类型搜索电影。我知道我可以重复使用大部分相同的代码来做到这一点。我想我需要创建一个新类,控制器类可以传递类型或价格。这个对吗?如果是这样,我会很感激一个例子。谢谢。
更新/澄清:
我想避免重复以下类型和价格的代码:
public ActionResult SearchIndex(string movieGenre, string searchString,float moviePrice)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
var PriceLst = new List<string>();
var PriceQry = from d in db.Movies
orderby d.Genre
select d.Genre;
PriceLst.AddRange(GenreQry.Distinct());
ViewBag.moviePrice = new SelectList(PriceLst);
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (string.IsNullOrEmpty(movieGenre))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == movieGenre));
}
if (string.IsNullOrEmpty(moviePrice))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == moviePrice));
}
}