Я сделал это, просто проверив myContent.Controls.Count. Однако вам, очевидно, нужно принять во внимание любые элементы управления по умолчанию, которые можно добавить.
Например, если ваш заполнитель контента определен как:
<asp:ContentPlaceHolder ID="myContent" runat="server">
</asp:ContentPlaceHolder>
Тогда вы получите LiteralControl
в коллекции элементов управления, содержащей "\ r \ n" (так как разрыв строки в определении анализируется).
Итак, если вы удалите это и определите как:
<asp:ContentPlaceHolder ID="myContent" runat="server"></asp:ContentPlaceHolder>
Затем вы можете выполнить проверку в загрузке главной страницы:
if (myContent.Controls.Count > 0)
// do stuff when populated with content..
Просто убедитесь, что вы тестировали код, чтобы убедиться, что вы действительно проверяете контент, добавляемый страницами контента, а не контент по умолчанию, определенный в мастере.
UPDATE
После редактирования, сказав, что эта проблема только для MVC, я могу подтвердить, что не в состоянии реплицировать . Я использовал тот же код, что и выше, в приложении MVC, и он работал точно так, как ожидалось и описано.
Можете ли вы опубликовать пример кода того, что у вас есть?
К вашему сведению - вот [рабочий] код:
Site.Master
<asp:ContentPlaceHolder ID="myContent" runat="server"></asp:ContentPlaceHolder>
<% if (myContent.Controls.Count > 0) { %>
<b>Content Added!</b>
<% } %>
index.aspx
<asp:Content ContentPlaceHolderID="myContent" ID="myContent" runat="server">
This will render and the "Content Added!" will also be rendered.
</asp:Content>
<%-- This will cause the "Content Added!" to be displayed but with no visual content --%>
<asp:Content ContentPlaceHolderID="myContent" ID="myContent" runat="server">
</asp:Content>
<%-- This will NOT render the "Content Added!" since there is zero content between tags --%>
<asp:Content ContentPlaceHolderID="myContent" ID="myContent" runat="server"></asp:Content>