-4

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 以外になるように強制されたため、この時点では問題はありません。ただし、この変更が機能した理由と、それが問題を解決するための「正しい」方法であるかどうかを理解したいと思います。

4

1 に答える 1

0

欠落した文字は HTML を破損することがよくあるためrunat="server、明らかにひどい結果になる可能性があります。

マークアップを適切に作成し、IDE が表示するエラーや警告に注意してください。あなたのコードをあたかもそれがコンパイルされた言語であるかのように考えてください。すべてが構文的に正しいものになるまで、コンパイルされず、ましてや実行することはできません。実際、Visual Studio を使用している場合は、警告をエラーとして処理するように構成することができます。そのため、これらのケースではビルドが失敗し、何が問題なのかを調べる必要があります。 .

それまでの間、見積もりを完成させてください。

runat="server"

と:

id="Top"

と:

id="Bottom"
于 2013-02-25T16:00:55.977 に答える