Asp.net 母版页需要知道内容占位符是否没有';当前内容页未使用

Asp.net 母版页需要知道内容占位符是否没有';当前内容页未使用,asp.net,Asp.net,我有一个母版页,其中有几个内容占位符。当前内容页并非总是使用所有这些内容。在页面呈现期间,当当前内容页未使用ContentPlaceHolder时,母版页需要设置属性。这意味着内容页可能未引用内容占位符 母版页遍历其内容占位符并找出当前内容页未使用的占位符的最佳方式是什么?寻找一个解决方案,不涉及从内容页到母版页的任何通信 是否有理由不在占位符中使用默认内容?像这样: <!-- Site.Master --> <asp:ContentPlaceHolder ID="SomeCo

我有一个母版页,其中有几个内容占位符。当前内容页并非总是使用所有这些内容。在页面呈现期间,当当前内容页未使用ContentPlaceHolder时,母版页需要设置属性。这意味着内容页可能未引用内容占位符


母版页遍历其内容占位符并找出当前内容页未使用的占位符的最佳方式是什么?寻找一个解决方案,不涉及从内容页到母版页的任何通信

是否有理由不在占位符中使用默认内容?像这样:

<!-- Site.Master -->
<asp:ContentPlaceHolder ID="SomeCotnent">
    <p>Content here will only appear if it's not overridden in content pages</p>
</asp:ContentPlaceHolder>

此处的内容只有在内容页中未被覆盖时才会显示


在母版页的PreRender事件中执行此操作-此时在页面循环中,将创建所有控件

YourMasterPage.master.cs

protected void Page_PreRender(...) {
    HidePlaceholders(this);
}

protected void HidePlaceholders(Control control)
{
     foreach (Control ctrl in control.Controls)
     {
         if (ctrl is ContentPlaceHolder)
         {
            if (ctrl.Controls.Count == 0)
            {
                ctrl.Visible = false;
            }

         }
         else
         {
            if (ctrl.Controls.Count > 0)
            {
                HidePlaceholders(ctrl);
            }
         }

     }
}

这些内容占位符包含在包含其他html元素的面板(或div)中。如果未使用每个contentplaceholder,则它应该是不可见的,以便不呈现这些额外的html元素。contentplaceholder不应包含任何类型的空白,因此在填充它们时需要处理这些空白。控件无法完成所有操作:)