0

ある種の管理者とメンバーのページがあります。両方が同じページを共有します。唯一の違いは、管理者がメンバーから離れた1つのUserControlを認識していることです。現在私はこれを行っています:

ucControl.Visible = false;

メンバー向け。これは機能します。しかし、それは非常に非効率的です。データベースにクエリを実行し、通常のライフサイクルに従い、ViewStateのスペースを占有します。これを取得して効率を上げるには、データベースにクエリを実行したり、ViewStateのスペースを不必要に占有したりしないようにするにはどうすればよいですか。

4

3 に答える 3

0

作る

EnableViewState = "false"

このコントロールのために。非表示にすることを除いて、このコントロールも無効にします。

于 2012-05-18T10:44:39.477 に答える
0

表示されている場合にのみデータベースなどを照会するコードを UserControl に追加するだけです。

Init フェーズで設定することをお勧めしucControl.Visibleます。おそらく、この段階で、ユーザーがメンバーか管理者かがわかります。次に、UserControl の Page_Load で可視性を簡単にテストできます。

コメントへの回答:

はい、初期段階で設定し、可視性を確認しています。page_load 自体でビューステートも無効にしますか? ユーザーがメンバーであることがわかったら?

ユーザーがメンバーの場合 (つまり、コントロールが表示されていない場合)、何もしません。このように、UserControl は ViewState に寄与しません。

// inside the UserControl's Page_Load method
if (this.Visible)
{
    // The user is an Admin, do whatever is needed (access database, databind, ...)
    ...
}
else
{
    // The user is a Member, this UserControl is not used, do nothing.
}
于 2012-05-18T10:46:50.210 に答える
0

プレースホルダーを使用して、コントロールを動的にロードします。これに関する唯一の問題は、ポストバックを使用してデータを記憶する必要がある場合、少しトリッキーになり始めることです。

于 2012-05-18T10:47:33.510 に答える