3

こんにちは、私は ASP.NET MVC 3 アプリケーションに取り組んでいます。

ビューがあります

var grid = new WebGrid(rowsPerPage: 10, ajaxUpdateContainerId: "GridDiv",canPage: true,canSort: true);
grid.Bind(source: Model);
grid.Pager(WebGridPagerModes.All);
@grid.GetHtml(htmlAttributes: new { id="grid" },
    columns: grid.Columns(
    grid.Column("Name"),
    grid.Column("Age"),
    grid.Column("Sex")
)

コントローラーには、データを並べ替えるためのカスタマイズされた並べ替えアルゴリズムがあります。カスタマイズされた昇順ソートとカスタマイズされた降順ソートの両方があります。

ユーザーが列ヘッダーをクリックして、ビルドインではなく、カスタマイズされた並べ替えアルゴリズムに従って行を並べ替えたい。

そのために、次のことを試しました(「sortdir」を取得し、それに応じて処理します)

コントローラ

public ActionResult Persons(string sortdir)
{    
    PersonsListModel = GetAllPersonsList();
    if(sortdir=="ASC")
        return View(MyAscendingCustomSortAlgorithm(PersonsListModel ));
    else
        return View(MyDescendingCustomSortAlgorithm(PersonsListModel ));
}

MyAscendingCustomSortAlgorithmMyDescendingCustomSortAlgorithmカスタムアルゴリズムでソートされたリストを返す関数です。

ページがロードされるとリストは正しくソートされますが、ヘッダーをクリックするとソートがめちゃくちゃになります。デバッグしたところ、すべてが正しく機能していました。

私の質問は、どうすればそれを機能させ、正しいページングを維持できるかです

私も設定しようとしcanSort: falseましたが、ヘッダーをクリックできなくなりました。

助けてくれてありがとう

4

3 に答える 3

2

Bind() メソッドの autoSortAndPage パラメータをオフにしてみましたか?

grid.Bind(source: Model, autoSortAndPage : false);

あなたが既存のページングを維持したかったのは知っていますが、両方を持つ方法があるかどうかはわかりません. アクション メソッドでページングを手動で行う必要がある場合があります。

于 2012-04-12T16:17:07.503 に答える
1

この方法で検索する必要があります。

  1. 並べ替えを無効にする
  2. カスタム スタイルを列ヘッダーに追加します (.GetHtml html 属性の「headerStyle: customStyle」)。グリッドのスタイリングの章を確認してください
  3. jquery を使用して、このスタイルのすべての要素にライブクリック ハンドラーを追加し、ユーザーがクリックすると、それがどの列であるかを確認し、それに応じてコントローラーに投稿して、ページを更新します。

また、css に customStype にリンクされたスタイル、つまり「cursor: hand」を追加して、ユーザーがヘッダーをクリックできるようにすることもできます。

于 2012-04-10T00:12:32.660 に答える
1

メソッドのパラメーターに、ページ番号、行数、並べ替え列、および並べ替え方向を追加します。また、json データを返すだけです。ビューを更新するには、JavaScript でそのデータを処理する必要があります。

独自の並べ替え CSS クラスをヘッダーに追加し、ajax アクションにリンクできます。JavaScript でグリッドに対処し、データ行を変更するだけでよい場合があります。

public JsonResult Persons(int pagenumber,int rows, string sortcol, string sortdir)
{    

if(sortdir=="ASC")
    return DataSource(pagenumber,rows,sortcol,MyAscendingCustomSortAlgorithm);
else
    return DataSource(pagenumber,rows,sortcol,MyDescendingCustomSortAlgorithm);

}

ソート関数をデータソース呼び出しに渡し、それを使用して json データを返すことができます。行にlinqクエリを使用できます

于 2012-04-12T02:11:38.107 に答える