基本的に次のようなコードがあります。
<div>
<% if(Something) { %>
<div id="someUniqueMarkup">
This markup should not be output if Something==true.
<units:MyUserControl runat="server"/>
</div>
<% }
else { %>
<units:MyUserControl runat="server" />
<% } %>
</div>
によってはSomething
、そのうちの 1 つが非表示になっていますが、それで問題ありません。しかし、ユーザー コントロールにブレーク ポイントを設定すると、それが 2 回 (上記のコントロールごとに 1 回) 読み込まれ、すべてのロジックが 2 回実行されることに気付きます。もちろん、プレースホルダーまたはマルチビューでこれを制御できますが、同じことが当てはまるようです - OnLoad
/ Page_Load
etc は、実際にページにあるコントロールごとに1回実行されます。
編集:
これを表示/非表示にする理由は、コントロールの周りにマークアップを含める必要があるためですSomething == true
。コントロールの前後に「一意のマークアップ」自体を if-else でラップすることもできますが、上記で想像したように本当に単純であるべきものには、それは汚いように思えます。ユーザー コントロール自体は、両方のシナリオでまったく同じである必要があります。プロパティが紛らわしくて申し訳ありません。
それは私だけですか、それともこれは本当に直感的でないインターフェースですか? また、ページ上にある限り、ユーザーコントロールをまったくロード/実行しないことは実際には可能ですか?