0

ASP.NET 4.0、JQUERY、AJAX、および Javascript に基づく Web アプリケーションを開発しています。ユーザーが複数の要素、つまり日付、名前、コード、カテゴリなどを介して検索できる特定の検索ページがあります。

例えば

A) SearchProducts フォームでは、ユーザーは一意の番号または名前または開始日/終了日またはカテゴリまたはなどを介して製品を検索できます。

B) ユーザーは、標準の検索フォームで実行できるパラメータの 1 つまたはすべてで検索できます。

C) ユーザーが開始日と終了日を介して検索すると、2012 年 12 月 1 日から 2012 年 12 月 31 日までと表示されます。たとえば、私の検索結果は 4 つの製品で構成されます。つまり、12 月 1 日から 12 月 31 日までに 4 つの製品が購入されます。

D) 結果はグリッドに表示され、製品番号をクリックすると、そのビュー ページ (選択された製品固有の詳細) にリダイレクトされ、クエリ文字列を介して ProductID が表示されます。

E)ユーザーが [表示] ページ (選択した製品固有の詳細情報) の [検索に戻る] ボタンを使用して検索した検索結果を保持できるようにする必要があります

さて、私が計画したことは次のとおりです。

1)ユーザーが検索で送信すると、ユーザーが入力した日付、名前、カテゴリなどの検索パラメータの参照を保存したいと思います。

2) 通常のリクエストと [検索に戻る] ボタン経由のリクエストを区別するために、クエリ文字列に値を設定します。

3) 検索ページのコード:

       if (!(IsPostBack))
       {
          string tempRequestMode = string.Empty;

          if (Request.QueryString["requestMode"] != null)
          {
              tempRequestMode = Request.QueryString["requestMode"].ToString();

              if (tempRequestMode == "searchResults")
              {
                 //RestoreValues();
                 //Fetch results from the database again based on above results
              }
          }
       }

さて、私の質問は:

この目的のためにASP.NET Cacheを使用したかったのです。

利点: 有効期限と依存関係

短所:アプリケーションスコープがあります。つまり、セッションのようにユーザーごとではありません。

2 番目のオプションはsessionです。

利点:ユーザーごとに賢明です。

短所: セッションはより多くのメモリを消費します。

私は何を使うべきか混乱しています。検索基準はユーザーごとに異なるため、使用する他のオプションはありますか?ユーザーごとにデータのメンテナンスが必要です。

4

2 に答える 2

0

この場合の最善のアプローチは、ユーザーが検索ページに戻ったら、保存されているフィルターを使用して検索をやり直すことだと思います。他のアプローチはあなたに大きな欠点をもたらします。

キャッシュの有効期限が切れます。デフォルトの実装を使用すると、ローカルであるため、アプリを複数のマシンに拡張できなくなります。

セッションを使用することも悪い考えです。なぜなら、セッションはリソースを消費し、拡張もできないからです。

結果を保存する必要がある場合は、シリアル化された(LOBパターン)データベースまたは別のネットワークアクセス可能なリソースに保存して、任意のアプリケーションサーバーで結果を取得できるようにする必要があります。

于 2012-12-18T12:43:40.047 に答える
0

すべての検索基準を QueryString に書き込むことができます。

ユーザーが検索ボタンをクリックすると、次の Javascript が実行されます。

クライアント側

<script type="text/javascript">
    var url = "Invoices.aspx?type=__type__&status=__status__&order=__order__";

    var type= $("#<%= drpType.ClientID%>").val(); // Type 
    var status = $("#<%= drpStatus.ClientID %>").val(); // Status Parameter
    var order = $("#<%= drpOrder.ClientID %>").val(); //  order Parameter

    window.location = url.replace("__type__",type).replace("__status__",status).replace("__order__",order).replace(");
</script>

サーバ側

  protected void Page_Load(object cart, EventArgs curt)
            {

                _type = Request.QueryString["type"];
                if (string.IsNullOrEmpty(_type))
                    _type = Enums.InvoiceUserTypes.RS.ToString(); //Default

                _status = Request.QueryString["status"];
                if (string.IsNullOrEmpty(_status)) _status = "ALL"; //Default

                _order= Request.QueryString["order"];
                if (string.IsNullOrEmpty(_order)) _order = "date"; //Default



                drpStatus.Value = _status;
                drpType.Value = _type;
                drpOrder.Value = _order;

RunReport();
            }

ユーザーが [戻る] ボタンをクリックしたとき。検索パラメータは URL に表示されます

于 2012-12-18T11:55:47.627 に答える