div 内のすべてにユニットとしてスタイルを適用できるように、ページ上のいくつかの要素をマスター ページのタグにカプセル化した ASP.Net ページがあります。これはいくつかの場所で正常に機能していますが、クライアント側の HTML で div がレンダリングされないことがあるため、スタイリングが表示されません。
企業ポリシーにより、実際のソース コードを含めることができません。ただし、コードは次のようになります。
<div id="SideBarArea" class="SideBarStyle" runat="server">
<div id="Top">
<asp:ContentPlaceHolder="TopPlaceHolder" runat="server"/>
</div>
<div id="Bottom">
<asp:ContentPlaceHolder="BottomPlaceHolder" runat="server"/>
</div>
</div>
Top div と Bottom div はレンダリングされた HTML に表示されますが、SideBarArea は表示されないか、少なくとも常に表示されるとは限りません。
実際には、アプリケーションの存続期間中に作成された同様のマスター ページがいくつかあります。ページは似ており、すべてに Top div と Bottom div がありますが、名前が異なります。これらの div は画面の左側にあり、論理的にサイドバー領域を作成します。ただし、歴史的には、画面上の位置によってグラフィカルに表示される場合を除いて、それらは結合されていません。
アプリケーション ロジックに応じて、サイドバー領域を有効または無効にするという新しい要件があります。これを実現するために、マスター ページにすべてアクセスし、上部 div と下部 div を SideBarArea という名前の新しい div にラップして、ラッパー div を有効または無効にします。ほとんどのマスター ページでは、このアプローチはうまく機能していますが、そのうちの 1 つでは、最終的なマークアップで SideBarArea div がレンダリングされず、コード ビハインドで対応する HtmlGenericControl が null です。
私がこれを書いているとき、私のパートナーは次のように div に表示スタイルを追加しました:
<div id="SideBarArea" class="SideBarStyle" runat="server" style="display:block">
<div id="Top">
<asp:ContentPlaceHolder="TopPlaceHolder" runat="server"/>
</div>
<div id="Bottom">
<asp:ContentPlaceHolder="BottomPlaceHolder" runat="server"/>
</div>
</div>
これにより、div が HTML でレンダリングされ、null 以外になるように強制されたため、この時点では問題はありません。ただし、この変更が機能した理由と、それが問題を解決するための「正しい」方法であるかどうかを理解したいと思います。