2

そのため、グリッド列の並べ替えを処理するために多くのページで使用しているインターネットから「借用」した方法があります。

        private string GetSortDirection(string column)
    {

        // By default, set the sort direction to ascending.
        string sortDirection = "ASC";

        // Retrieve the last column that was sorted.
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {
            // Check if the same column is being sorted.
            // Otherwise, the default value can be returned.
            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }

        // Save new values in ViewState.
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }

これでうまく機能しますが、残念ながら、ビューステートを参照しているため、呼び出し元のすべてのページにコピーする必要があります。そのため、ヘルパークラスに移動して、代わりにセッション状態で保存したいのですが、ヘルパークラスでどちらの状態も参照できません。

ヘルプクラスからセッションにアクセスする方法はありますか?セッション状態を参照して渡すことはできますか?

4

4 に答える 4

3

私が質問を正しく理解している場合、あなたはページではないクラスにアクセスするViewStateか、クラスからアクセスしようとしています。Session

その場合は、またはを使用できます。型キャストしてタイプし、にアクセスHttpContext.Current.Sessionできるはずです。HttpContext.Current.CurrentHandlerPageViewState

または、コードを基本クラスに配置することもできます。基本クラスは、から継承するのではなく、すべてのページから継承しSystem.Web.UI.Pageます。

于 2012-07-31T19:07:14.730 に答える
1

HttpContext.Current.SessionSystem.Webを参照し、Webプロセスで実行されている任意のアセンブリで使用できます。

ただし、Sessionにそのような一般的な(つまり、複数の場所で再利用される、非特定のキー)値を配置すると、あらゆる種類の問題が発生します。たとえば、ユーザーが同じセッションで2つのブラウザウィンドウを開いた場合はどうなりますか?

Page基本//クラス、またはページのデータで初期化されるヘルパークラスのControlいずれかをお勧めします。UserControlコードサンプルは、コントロール関連の基本クラスに属しているように見えます。

于 2012-07-31T19:06:59.720 に答える
1

System.Web.HttpContext.Current を使用できますが、このようなセッション状態を使用すると、同期の問題が発生する可能性があります。GetSortDirection メソッドを拡張メソッドとしてページに追加すると、より簡単に実現できる可能性があります。

于 2012-07-31T19:12:32.093 に答える
1

いいえ、Session を使用しません。Session をテストすると、One Columns 1 を選択するユーザー 1 がいて、ページを変更すると、同じ列が選択されます。これは問題です。初期状態と選択されていない状態。

技術的にはセッションを使用できますが、機能的にはお勧めしません

于 2012-07-31T19:06:46.103 に答える