0

タイトルではこれをうまく表現できませんでした。

ページとして表示される製品のユーザーイベントの履歴があり、ページごとのイベント数を設定したり、必要に応じていくつかの列で結果をフィルタリングしたりできます. フィルターは、単一の選択として機能していました。たとえば、イベントのタイプのドロップダウン リストがあり、その中から 1 つだけを選択してフィルタリングすることができます。各フィルター ドロップダウン リストで複数の選択肢を選択するためのサポートを追加しましたが、ページングが機能しなくなりました。

現在行われているのは、各ページ番号、前/次のページ リンク、およびページごとのイベント数を変更するリンクの ActionLinks を生成することです。以前は単一の選択であったため、これらの値をルート値として入力し、次のページの適切にフィルタリングされたデータを返すために使用するコントローラーに送信するのは非常に簡単でした。これで、単純な列挙値 (いくつかのドロップダウンはまだ単一選択です) と列挙値のリストが混在しています。

自分のページでフィルター データを RouteValueDictionary として受け取っているので、値を適切に処理する前に、値がオブジェクトかオブジェクトのリストかを確認する必要があります。

つまり、フィルター オプションをコントローラーに送り返すリンクを生成する必要があります。フィルタ オプションには、文字列をキーとする列挙型のものもあれば、文字列をキーとする列挙型のリストのものもあります。<string, objectこれらのフィルター オプションは、ビュー側で> 辞書にまとめて使用できます。

これを行う「良い」方法が何であるかを理解できません。

他に何か知っておく必要がある場合はお知らせください。

4

1 に答える 1

0

フィルターが更新されたら、結果ページを更新する必要があることは当然だと思います。この場合、リンク URL を変更する代わりに、jQuery Ajax を使用してすべてを処理します。私が Ajax に切り替える理由は、サーバーに送信するオブジェクトを作成するのは簡単ですが、複雑なオブジェクトをクエリ文字列として送信するのは簡単ではないからです。あなたはそのようなものを持っているでしょう:

$(document).on('click','selector of your filter inputs', function(){
    $.Ajax({
        url: '/[Controller]/[Action]',
        type: 'GET',
        data: { filter1: $('input').val()... }, // however complex object you need
        success: function(data){
            $('selector of the result container').html(data);
        }
    });
});
于 2013-03-14T22:59:01.807 に答える