2012-04-11 66 views
1

試圖創建一個查詢,該查詢將在選定的價格範圍內顯示待售汽車。使用最小和最大選項查詢汽車價格

在控制器中我有以下查詢哪些工作。

public ActionResult index (string searchString) 
{ 
if (!String.IsNullOrEmpty(searchString)) 

{ 
Car = Car.Where(s => s.Car.CarName.Contains(searchString)); 

} 

價格的MIn和Max我遇到了麻煩。

public ActionResult index (int min, int max, string searchString) 
    { 
     if (!String.IsNullOrEmpty(searchString)) 

     { 

    Car = Car.Where(s => s.Car.CarName.Contains(searchString) 
    && s.Price >= min && s.Price <= max).OrderBy(s => s.Price); 


    ViewBag.minprice = min; 
    ViewBag.maxprice = max; 

在視圖中,我有一個相應的視圖下拉列表(最小值和最大值)。

我收到一個錯誤:

一個可選參數必須是引用類型,可空類型,或聲明爲可選parameter.Parameter名稱:參數

+1

你有什麼麻煩? – 2012-04-11 20:11:18

+0

查詢看起來很奇怪。爲什麼在汽車名稱查詢中有集合訪問語法's.Car.CarName',然後是直接成員訪問's.Price'?不應該成爲具有價格和CarName成員的汽車對象嗎? – 2012-04-11 20:16:22

回答

0

想必,你還在使用您的舊網址即可訪問索引頁。這個舊網址不包含min和max參數,這些參數在您的操作中是必需的,所以它會炸燬。另外,如果您爲索引製作了自定義路線,請確保您已將其重寫爲包含這兩個新參數。

0

這聽起來像一個路由問題。您需要在默認路由之前在global.asax頁面(RegisterRoutes方法)中添加如下內容。

routes.MapRoute(
     "IndexCompare", // Route name 
     "{controller}/{action}/{min}/{max}/{searchString}", // URL with parameters 
     new 
     { 
      controller = "{controller}", 
      action = "Index", 
      min = 0, 
      max = 0, 
      searchString = UrlParameter.Optional 
     } // Parameter defaults 
); 

因此,每次更改動作簽名時,都需要確保有一條路徑與之匹配。