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

ご覧のとおり、インデックスビューからデータを取得し、を使用せずにSearchResultビューに直接投稿しますpublic ActionResult SearchResult(){...}。しかしpublic ActionResult SearchResult(){...}、コントローラーにはメソッドがあります。

今、私は自分の結果をソートしようとしています。どうやってやるの?

IndexメソッドからTempDataなどの検索結果メソッドにデータを渡すためにさまざまな方法を試しました。ただし、並べ替えボタンをクリックするとページが再読み込みされ、インデックスビューフォームから取得したクエリはすべてnullになります。これは、TempDataはメソッド間でデータを渡す場合にのみ有用であり、メソッドが呼び出されると、データは失われ、すべてnullになります。

私はいくつかの解決策を考えていますが、それらがうまくいくかどうか、そしてそれらが考え出すことができる最良/最も簡単な解決策であるかどうかはわかりません。これは、インデックスページから取得したクエリをテーブルに記録しています(これを行うのは賢明なことではないと思います)。

4

2 に答える 2

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 に答える
0

ビューに戻る代わりに、コントローラで Search result アクションを直接呼び出さないでください。

別の方法は、プロセスの後に強制的に Index アクションを呼び出す必要がある場合です。

使用する

 return SearchResult(cars);

それ以外の

 View("SearchResult", cars);

よろしく、 Pavan.G

于 2012-12-03T09:39:13.100 に答える