2010-12-26 3 views
0

私はここで問題に直面しています。私はASP.NET MVCアプリケーションを構築しています。最終段階では、複数のフィルタを使用して検索を実行する検索ページ機能を実装します。QueryStringのモデルですか?

私はいくつかのプロパティを持つSearchModelというモデルクラスを実行しました。em 'は検索フィルタのコレクションです。問題は検索結果ページにあります。私はSearchModel全体を検索基準と追加のページングパラメータとして保持する必要があります。私は、次のページや前のページへのリンクを追加したいと思います.GETリクエストでしか利用できません。

Documents/Search?CriteriaFilters[0].Field=OwnerUserName&CriteriaFilters[0].Type=Text&CriteriaFilters[0].Text=albert.sheppard&CriteriaFilters[0].TextMatchMode=Exactly

そして、それがわずかな基準テキストで一つのフィルタを使用していた:私はGETを有効にした場合、私は次のようにモデル全体を含む巨大なクエリ文字列を取得します。私が10個以上のフィルターを使用していると、悪くて厄介なように見えます。

モデル全体をクエリ文字列に解析せずに、複数のフィルタを持つ検索ページと結果ページをどのように処理するのですか?クエリ文字列の暗号化?もしそうなら、これを達成する方法は?

ありがとうございました。

+3

代替としてPost/Redirect/Getパターンを考慮する必要があります。 http://en.wikipedia.org/wiki/Post/Redirect/Getと検索のIDを渡すだけです(db/memcacheに格納されている可能性があります)。 –

答えて

0

私はASP.NET MVCについてはわかりませんが、POSTで行う必要があります。あなたのフィールドの多くはあなたの例では使われていないと理解していますが、値を持つこともあり、GETのサイズは非常に限られています。あるいは、あなたは、あなたの基準を表す非常に圧縮された方法を考え出すことができます。しかし、それでもPOSTはずっと優れています。

私は次のようにMVCを使用して、検索条件のURLを実装している
+1

POSTリクエストを使用する際の問題点は、リンクではなくフォームを送信するためにブックマークしたり新しいウィンドウやタブで開くことができないことです。 –

0

Acerのノート>>ノート>> 15.6in >> Core 2 Duoプロセッサ

http://myserver/SearchApp/Search/4/acer%20notebook/1/50-97-77868%2c50-111-76631?sort=0&catGrp=50

private 
ActionResult SearchAction 
(
    int siteId, 
    string query, 
    int? page, 
    string options, 
    SortType sortType, 
    int catGroupId 
) 
{ 
    // Search code implementation 
} 

上記URLとコントローラ

検索アクション

4 - のsiteId

エイサー%の20notebook - クエリ

50-97-77868%2c50-111-76631 - 15.6inを表すオプション(それはオプションのカンマ区切りのリストである)、>>コア2デュオ

0 - SORTTYPE

50 - catGroup

これが役立つことを願っています。

+0

ここから始めるにはいい場所です。 2つの検索フィルタタイプ、1つはプレーンテキストで、もう1つは日付範囲フィルタです。テキストフィルタには "starts with"、 "ends with"などのオプションがあります。 –

+0

最初にパラメータとしてGETリクエストでモデルを探していて、リクエストのXMLシリアル化(テキスト)を文字列パラメータとして使用することが考えられます。しかし、それはURLを少し長くします。私が示唆するのは、個々のパラメータを使用し、必要なオーバーロードされたメソッドを多数作成することです。日付範囲パラメータも定義できますが、パラメータとしてDateTimeを試していないので、文字列表現を使ってすべてを処理します。 – ShahidAzim