代码之家  ›  专栏  ›  技术社区  ›  Tony_Henrich

母版页需要知道当前内容页是否未使用ContentPlaceHolder

  •  2
  • Tony_Henrich  · 技术社区  · 14 年前

    我有一个母版页,其中有几个内容占位符。并不是所有的内容页都一直在使用它们。在页面呈现期间,如果当前内容页未使用ContentPlaceHolder,母版页需要设置属性。意味着内容页可能未引用ContentPlaceHolder。

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   TheGeekYouNeed    14 年前

    在母版页的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);
                }
             }
    
         }
    }
    
        2
  •  0
  •   Mhmmd    14 年前

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

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