2012-12-03 94 views
1

我已經閱讀了許多有關此問題的教程,我找不到類似於我的情況。對另一個視圖發佈的結果進行排序

我有一個索引視圖,裏面有一個搜索表單來過濾我的數據庫中可用的結果。

這裏的簡化版本我爲我的索引視圖控制器動作:

[HttpPost] 
    public ActionResult Index(String carMake, String carModel) 
    { 
     var cars = from d in db.Cars 
        select d; 

     if (!String.IsNullOrEmpty(carMake)) 
     { 
      if (!carMake.Equals("All Makes")) 
      { 
       cars = cars.Where(x => x.Make == carMake); 
      } 
     } 

     if (!String.IsNullOrEmpty(carModel)) 
     { 
      if (!carModel.Equals("All Models")) 
      { 
       cars = cars.Where(x => x.Model == carModel); 
      } 
     } 

     cars = cars.OrderBy(x => x.Make); 
     return View("SearchResult", cars); 
    } 

,你可以看到,我從索引視圖獲取數據,並將其張貼到我的信息搜索結果直接觀看,無需使用任何public ActionResult SearchResult(){...}的。但我在我的控制器中有public ActionResult SearchResult(){...}方法。

現在,我正在嘗試對結果進行排序。我怎樣才能做到這一點?

我已經嘗試了許多不同的方法將數據從我的索引方法傳遞給搜索結果方法,如TempData等。但與他們的問題是,當我點擊排序按鈕頁面重新加載和我從我的索引視圖形式採取的查詢將全部爲空,因爲TempData僅用於在方法之間傳遞數據和方法被召回時,數據將消失,全部爲空。

我在腦海中有一些解決方案,但我不確定他們是否能解決問題,以及他們是否可以提出最佳/最簡單的解決方案。將我從索引頁獲得的查詢記錄到一張表中(我認爲這不是一個明智的做法)。

回答

0

我認爲應該是;

[HttpPost] 
public ActionResult Index(String carMake, String carModel) 
{ 
    //Redirect to SearchResults. You can do this from client as well. 
    return RedirectToAction("SearchResult", 
       new { make = carMake, model = carModel }); 
} 

//Add your filter and order code here 
public ActionResult SearchResult(String make, String model) 
{ 
    var cars = from d in db.Cars 
       select d; 

    if (!String.IsNullOrEmpty(make)) 
    { 
     if (!carMake.Equals("All Makes")) 
     { 
      cars = cars.Where(x => x.Make == make); 
     } 
    } 

    if (!String.IsNullOrEmpty(model)) 
    { 
     if (!carModel.Equals("All Models")) 
     { 
      cars = cars.Where(x => x.Model == model); 
     } 
    } 

    cars = cars.OrderBy(x => x.Make); 
    return View(cars); 
} 
+0

謝謝你的完整和易於理解的答覆:)。不過,我在我的控制器中試過了你的解決方案它確實會傳遞這些值,但是當我嘗試對結果進行排序時(這些結果是由用戶從Index視圖頁給出的值進行篩選的)所有已傳遞的值都將爲空。 我無法嘗試從表格中發送變量,因爲我不知道如何去做。但我會研究它並找出答案。 – moamzia

0

而不是返回到視圖爲什麼不直接調用控制器中的搜索結果操作。

另一種方式是,如果你強制必須調用索引操作,你的進程

使用後

return SearchResult(cars); 

,而不是

View("SearchResult", cars); 

問候, Pavan.G

+0

謝謝Pavan G的回覆。但是當我從我的索引視圖發佈數據時,由於某種原因,它會重新加載索引視圖!我不知道爲什麼它會做這樣的事情。 – moamzia

+0

當你調用Searchresult方法時,你也應該指定return,因爲我已經給出了.return SearchResult(cars); –

+0

你是否一定需要調用索引方法?你爲什麼不直接去搜索結果動作?順便說一下,搜索結果操作是做什麼的? –

相關問題