以下代碼摘自本教程:http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examining-the-edit-methods-and-edit-view,其中顯示瞭如何使用ASP.net MVC 3來管理電影數據庫。在控制器類中重複使用代碼
在tutoral中,列表對象被添加到包含數據庫中存在的每個電影類型的控制器類。然後將該列表傳遞給視圖中的下拉菜單,從而使數據庫能夠按流派搜索。
控制器:(粗體有關電影類型的代碼)
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));
}
}
您需要下拉列表中的價格嗎? – Sharun 2013-03-21 12:23:44
你真的需要下拉列表中的價格作爲流派嗎? – Sharun 2013-03-21 13:47:21
不是。這更多的是關於重用代碼的理論問題。我只是以教程爲例。 – user1405195 2013-03-21 14:32:27