1

(SQL)Visual Studioデータベースファイル(.mdf)からデータをロードするasp.netページを作成しています。

データは、データベースから取得したユーザーデータを含むユーザーオブジェクトのリスト(リスト)にロードされます。このデータは、1列目にチェックボックスが付いたASP.netテーブルに表示されます。これにより、Webページを表示しているユーザーは、理論上、チェックボックスを使用してユーザーを選択できます。

同じページにもASP.netボタンがあり、クリックするとポストバックが発生し、テーブルの行を調べて、チェックされている行とチェックされていない行を正しく識別します。Page_Loadイベントが発生し、データベースの内容が2回目に再ロードされるため、この時点でユーザーデータを取得できます。

明らかに、これは各Page_Loadでユーザーの完全なリストを取得するのに非常に費用がかかる可能性があるため、ボタンクリックか標準ページロードかを識別できるIsPostBack変数を使用して調査を開始しました。

IsPostBackを使用するときに発生する問題は、最初のPage_Loadイベントでリストにロードされたデータベースの内容が、データベースへの呼び出しが発生しないため、nullに等しくなることです。これは理解できる予想される動作です。私の質問は、リストの内容を保持して、ボタンをクリックすると、別のデータベースクエリを実行しなくても、最初のPage_Loadでデータベースからロードされたデータにアクセスできるようにするための最良の方法は何でしょうか。

ありがとう。

4

3 に答える 3

1

データベースから結果をキャッシュしてから、通常どおりバインディングを実行することをお勧めします。ViewStateに保存するなど、他のオプションもありますが、データによってはページサイズが大幅に大きくなる可能性があります(個人的にはViewStateのファンではありませんが、オプションです)。

結局のところ、ページを機能させるために必要な一定量のデータがあり、そのデータを何らかの方法で保存および取得する必要がなくなるため、最も保守しやすいものを決定することになります(予想される)許容できないトレードオフがない方法。私の意見では、それはデータベースの結果をキャッシュすることになるでしょうが、それは実際にはアプリケーションに依存します。

于 2012-05-25T08:12:31.327 に答える
1

取得しているユーザー固有のデータでない場合は、キャッシュに保存します。

Asp.netキャッシング

特定のデータを使用する場合は、セッションに保存します。

セッション

于 2012-05-25T08:14:09.760 に答える
0

クラス内にプライベート変数を保持するのはどうですか?

private List<myObject> _data = null;

private void Page_Load(object sender, System.EventArgs e)
{
    if(!Page.IsPostBack)                        
    {
        _data = loadDataFromDb();
    }
}

private void Button_Click()
{
    if(_data != null)
       //Do something with the data
}

-更新:この方法でポストバックを回避できると思うので、データを1回だけロードします。

于 2012-05-25T08:13:48.627 に答える