Page1 と Page3 の MasterPage.OnLoad イベントでは、TitleContent.Controls.Count>0 を取得しますが、Page2 では (runat=server のないサーバー タグがあるとすぐに) コントロール カウントはゼロになります。その理由と、Page2 のコンテンツを確認する方法を教えてください (Page2 を制御できないと仮定して、runat=server を追加しても効果がありません)。
パイプラインの後半に移動することを考えましたが、MasterPage と ContentPlaceHolder コントロールのレンダリング前の段階では、コントロール カウントはまだゼロです。
(VS2010 ASP.NET Web フォーム .Net 4.0)
マスターページ.aspx:
<asp:ContentPlaceHolder ID="TitleContent" runat="server"/>
Page1.aspx:
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="TitleContent">
<h1>Heading Text</h1>
</asp:Content>
Page2.aspx:
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="TitleContent">
<h1><%= HeadingTextFromCode %></h1>
</asp:Content>
Page3.aspx:
<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="TitleContent">
<h1 runat="server"><%= HeadingTextFromCode %></h1>
</asp:Content>
余談: 私が本当に聞きたかったのは、「ContentPlaceHolder が空かどうかを確認するにはどうすればよいか」ということでした。確実に機能する唯一の方法は、内容を文字列にレンダリングし、defrost で提案されているように空かどうかを確認することです。
ContentPlaceHolder が空かどうかを確認するには?
このソリューションは、私のシナリオの 3 つすべてで機能しますが、文字列が空かどうかを確認するためだけに文字列にレンダリングするのは、面倒で繰り返しが多いようです。