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);
    }

如您所见,我从 Index 视图中获取数据并将其直接发布到我的 SearchResult 视图中,而无需使用任何public ActionResult SearchResult(){...}. 但我public ActionResult SearchResult(){...}的控制器中确实有方法。

现在,我正在尝试对结果进行排序。我怎样才能做到这一点?

我尝试了许多不同的方法将数据从我的 Index 方法传递到 Search Result 方法,例如 TempData 等。但是它们的问题是,当我单击排序按钮时,页面会重新加载,并且我从索引视图表单中获取的查询将全部为空,因为 TempData 仅用于在方法之间传递数据,并且在调用该方法时,数据将消失,全部为空。

我有一些解决方案,但我不确定它们是否会奏效,以及它们是否是可能提出的最佳/最简单的解决方案。它将我从索引页面获得的查询记录到一个表中(我认为这样做不是明智之举)。

4

2 回答 2

0

与其返回视图,不如直接在控制器中调用搜索结果操作。

另一种方法是,如果您必须在流程之后强制调用 Index 操作

采用

 return SearchResult(cars);

代替

 View("SearchResult", cars);

问候, Pavan.G

于 2012-12-03T09:39:13.100 回答
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);
}
于 2012-12-03T10:08:52.803 回答