2012-12-03 47 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

你是否一定需要调用索引方法?你为什么不直接去搜索结果动作?顺便说一下,搜索结果操作是做什么的? –

相关问题