2011-02-04 8 views
1

私の計画は、ASP MVC 3を使用して2ペインのページを作成することです。左側のペインは小さなフィルタペインで、メインのコンテンツはオブジェクトのリスト(製品)を示しています。フィルタリングペイン、ASP MVC 3

フィルタが適用されていないため、最初はすべての製品が表示されます。 「赤のみ」を選択すると、赤い製品のみがリストに表示されます。さらに価格帯を選択すると、その価格帯の商品のみが表示されます。

機能的には、フィルタリングペインをチェックボックス付きのツリービューとして実装することです(より具体的なフィルタリングオプションをドリルダウンできるようにするため)、グラフィカルに、おそらく使いやすさを向上させるために何らかの方法で拡張されます。

フィルタペインとメインリストの結合を実装する最も良い方法は何ですか?すべてがサーバー側で動作するはずですが、直接的なフィードバックが可能な場合はjavascript(jQuery)を使用する必要があります。

最も簡単な方法は、カスタムビルドのJavaScriptを使用して特定のAsp MVCアクションを呼び出すことです(フォームポストへのフォールバックを使用して)。十分な作業は可能ですが、ソリューションを再利用可能にする方法はありますか?また、前と後ろをナビゲートするときにすべてのフィルタリングデータを緩和しないといいでしょう。私はGETの引数がそれを行う唯一のまともな方法だと思いますか?

フィルタリングのための素敵なモジュラー構造を作るためのベストプラクティス、ガイドラインなどがありますか?

答えて

2

私は最近、この同じ問題を解決しなければなりませんでした。私はそれが最善の方法だと約束しているわけではありませんが、JavaScriptは無効になっている場合(それはもはやそれをしていますか?

  • 「赤だけ」のようなフィールド選択可能な検索オプションをすべて使用してアクションを呼び出すaを作成します。同じフォームに

  • 、直接ではなくフィールド(ページング、並べ替え...)優れたJQuery.Formsを非常に使いやすいと

  • セットアップフォームを(ようなもののために空の、隠された値を追加http://www.malsup.com/jquery/form/)を使用して、JQuery経由でフォームをフォームにすることができます(すべてのフォーム値は、フォーム送信時にJSONとして渡されます)。

  • バック/次/ページング/ソートのリンクをクエリ(JSのフォールバックなし)で個別の値に渡し、JQueryを使用してクリックイベントをキャプチャします。それらのリンク上のJQueryクリックイベントは、フォームの対応する非表示フィールドにリンク(ページ番号、ソート列名...)によって渡された値の値を割り当てる必要があります(Jquery.FormsがAJAX)。

  • JQuery.Formsを設定するときに、コールバックメソッドを定義できます。コールバックメソッドでは、結果(フィルタリングされた+ソート済み+ページングされた結果を含むアクションによって返されるHTML)を取得し、ドキュメント(または部分アクション+ビューを使用した場合はDIV)を置き換えます。

結果はJSがオフのときに機能するJQueryソリューションです。また、イベントハンドラを配線する以外に書くことができる最小限のJSコードがあります。

MVC 3では、ビューからIsAjaxというプロパティにアクセスできるため、AJAXから呼び出されたときにサーバーとは少し異なるビューを実行できます。

乾杯

+0

おかげで、非常に私は考えていた線に沿って聞こえる - GET引数の長いリストを:)とにかく - サーバー側を処理するための任意の巧妙な方法は何ですか? "アクションフィルタ(文字列thisValue、文字列thatValue、リスト checkboxFiltering、int numberOfResults、int page、...)"よりも優れていますか?リストが長くなり、より洗練されたソリューションが存在するはずですか? – Victor

+0

実際に私が提案したのは、フォームを介して引数をPOSTします。フィルタリングパラメータの長いリストを送信しない場合は、代わりにフィルタリングプロパティを持つオブジェクトを作成します。あなたの行動では、パラメータを単一のオブジェクトに置き換えてください。モデルバインディングは、投稿されたパラメータをオブジェクトのプロパティと自動的にバインドします。 –

+0

+1と受け入れ - 私はjQuery.Formsの方法を終了しました。どうもありがとう。そして引数については、GET/POSTはASPの観点からはそれほど重要ではありません。最終的には、Telerik ASP MVC Treeviewコンポーネントの上にソリューションを構築しました。そのため、単純化のためにモデルバインドをベースとして使用しました。 – Victor