1

、、などのいくつかの属性をShoeItem格納するクラスがあります。ShoeModelPriceColor

私のIndex見解では、いくつかのフィルターを使用して要求されShoeControllerたユーザーのaを表示しますが、Listここshoesでは問題ありません。

リストはデフォルトのMVC3.0リストビューに表示されます。@ModelビューページのMy( "Index.cshtml")はタイプです。List<ShoeItem>

ただし、ユーザーが結果のリストを昇順または降順の両方の属性に従って並べ替えることができるようにしたいのですが、できません。

内のasパラメーターを返送してPartialViewResultからを呼び出して、そこに並べ替えて、この並べ替えられたリストでを表示しようとしましたが、Listパラメーターはnullとしてコントローラーに送られます。ShoeControllerList<ShoeItem>Ajax.BeginFormPartialView

また、jQueryでクライアント側の並べ替えを試みましたが、jQueryからオブジェクトに到達できませんでしたList<ShoeItem>。見たい場合はコードを投稿できますが、簡単です。

何か案は?

4

1 に答える 1

2

2つのオプションがあります

  1. ソートパラメータを渡してサーバーにAJAXリクエストを作成します/shoes/?sort=model&dir=asc。これらのパラメーターをコントローラーアクションに取り込み、アイテムを取得して並べ替え、JsonResultを返します。JavaScriptを介して新しいリストをレンダリングします。
  2. sortparamsを使用してサーバーにAJAX/フルページリクエストを作成します。これらのパラメータをコントローラアクションに取り込み、アイテムを取得して、AJAXのPartialViewとフルページリクエストのViewResultを返します。

最初の方法は、サーバーとクライアントの2つの異なる場所からレンダリングすることになり、保守が難しくなります。これは、口ひげのようなある種のテンプレートライブラリを使用することで簡単になります:https ://github.com/janl/mustache.js 。

2番目のオプションの場合、コントローラーは次のようになります。私はいくつかの仮定をしました、そしてそれはおそらく合理化されるかもしれません、しかし有益にそれはあなたが始めるのを手に入れるでしょう。靴がデータベースに保存されている場合は、必ずIQueryableでフィルタリングと順序付けを行ってください。そうすれば、データが.NETに返され、フィルタリングされるのではなく、データベースサーバーがそれを行います。

public ViewResult Index(int? colour, string sort, string dir)
{
    IQueryable<Shoe> shoes = shoeService.GetAllShoes();

    // Filter by something
    if(colour.HasValue)
        shoes = shoes.Where(s => s.Colour = colour);

    // Order the items
    switch((sort ?? "").ToLower())
    {
        case "colour":
            if(dir == "desc")
                shoes = shoes.OrderByDescending(s => s.Colour.Name);
            else
                shoes = shoes.OrderBy(s => s.Colour.Name);
            break;
    }

    if(Request.IsAjaxRequest())
        return PartialView(shoes.ToList());
    return View(shoes.ToList());
}
于 2012-09-13T17:08:29.300 に答える