2009-08-20 10 views
5

どちらが推奨されていますか?達成したいことを説明しましょう!
多くのユーザーが1ページを使用しています。すべてのユーザーは、管理者、オペレータ、通常ユーザーなどの異なる役割を持っています。
クライアントがそのページを開くと、ロールに応じた一連のコントロール(ボタン)が表示されます。
adminはxとyを許可されますが、通常のユーザーはこれらの操作を実行できません。
ASP .NET:動的ロードコントロールとVisible = trueの比較

私がしたいことを達成するために、どの方法が最良の方法ですか?
すべてのコントロールをHTMLで定義し、次にVisibleプロパティを切り替えたり、必要なコントロールを動的に読み込んだりする必要がありますか?


Visible = falseの場合、サーバーの処理時間が心配です。 Visible = falseコントロールのためにHTMLマークアップがクライアントに送信されない場合でも、コントロールがまだASP .NETによってロードされ、処理されている可能性がありますが、HTMLの結果は出力ストリームに書き込まれません。

動的にロードされるコントロールでは、ポストバックで再初期化する必要があり、イベントやポストバックにいくつかの問題があります。

答えて

3

ゲインが複雑さや節約の価値がないので、私はそれを動的にはしません。 visible = falseを設定した場合でも、ビューステートはコントロールで有効になっていることに注意してください。前後のデータが心配で、より大きなビューステートを扱う場合は、すべてのコントロールまたはそれらを含む親パネルのviewstateを無効にしてください。ポストバックで状態を動的に維持するのと同じ不便さがあります。

また、非動的に行うことは、コードを扱う次の人に保守する方がはるかに簡単です。どのようなコードをどこに置いているのか把握しようとするよりも、レイアウトが明白で視覚化が容易です。

コントロールを動的に作成すると、viewstateを除外した場合を除き、動的にコントロールすることはできません。ビューステート以外のコントロールと、必要に応じて動的に追加する必要があるオーバーヘッドとの間の負荷の下でさえ、顕著な違いの多くを測定することさえ困難であると思います。

最後に、動的に実行しない方が簡単なので、最も簡単なルートをまず取り、問題がないかどうかを確認してください。それが問題になる場合は、必要に応じて修正してください。

1

.Visible = falseはこれに対してかなり合理的なアプローチです。あなたがプロファイリングを介してそれが必要であることを証明するまで、この方法の速度に心配しないでください。あなたは

1

それらをデバッグします。時間のかかる作業を行う非常に複雑なコントロールがないか、実際にパフォーマンスの問題が確認されていない限り、私は不可視の方法を強く推奨します(定期的に行う)。実際にはKISSの原則です(「あらかじめ最適化しない」原則は言及しません)。

+0

興味深いアプローチですが、私の場合は動作しません。管理者はxとyを実行でき、モデレータはxアクションも実行できますが、yは無効です –

+0

if(admin) { x.visible = true y。visible = true } –

+0

if(モデレータ) { x.visible = true y.visible = false } –

1

を別のパネルに異なる役割のコントロールを配置し、単に可視/不可視のパネル全体場合は、動的コントロールを持つ別の不都合はあなたがそれらを処理するために記述する必要が脆い大量のコード、および頭痛は何

関連する問題