首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查ContentPlaceHolder是否为空?

如何检查ContentPlaceHolder是否为空?
EN

Stack Overflow用户
提问于 2013-08-20 21:43:51
回答 5查看 4.4K关注 0票数 9

如何检查ContentPlaceHolder是否绝对为空?

在ContentPlaceHolder中只有文本,没有标签和控件。

示例Page.Master:

代码语言:javascript
复制
<asp:ContentPlaceHolder runat="server" ID="Content" />

示例Test.aspx:

代码语言:javascript
复制
<asp:Content runat="server" ContentPlaceHolderID="Content">
    Custom text without controls. Content.Controls.Count is 0 and Content.HasControls is false.
</asp:Content>

我需要做的是,当占位符为空时,put是另一个控件中的默认内容。

对于相同的占位符,重写尝试了两次,但在动态加载时我得到了错误。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-08-20 21:54:05

您可以实现一个将内容控件呈现为字符串的方法,然后检查该字符串以查找它是否包含任何非空白字符:

代码语言:javascript
复制
private bool HasContent(Control ctrl)
{
    var sb = new System.Text.StringBuilder();
    using (var sw = new System.IO.StringWriter(sb)) 
    {
        using(var tw = new HtmlTextWriter(sw))
        {
            ctrl.RenderControl(tw);
        }
    }

    var output = sb.ToString().Trim();

    return !String.IsNullOrEmpty(output);
}

protected void Page_PreRender(object sender, EventArgs e)
{
    var placeholder = Master.FindControl("FeaturedContent");
    var hasContent = HasContent(placeholder);
}
票数 5
EN

Stack Overflow用户

发布于 2013-08-20 21:46:23

您需要首先在母版页上找到ContentPLaceHolder。然后,您可以将第一个控件(始终存在)转换为LiteralControl,并使用它的Text属性。

因此,这与内容页面的Page_Load所期望的一样工作:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
    var cph = Page.Master.FindControl("Content") as ContentPlaceHolder;
    if (contentPlaceHolder != null)
    {
        string textualContent = ((LiteralControl) cph.Controls[0]).Text;
        if (string.IsNullOrEmpty(textualContent))
        {
            // ...
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-02-25 00:00:00

这似乎已经改变了,因为我在4.5中看到,当HasControls Content,中只有文字文本,甚至只有一个空格时,确实返回true。我在我的主页上做了这样的事情:

代码语言:javascript
复制
<asp:Panel id="SidebarPanel" CssClass="Sidebar" runat="server">
    <asp:ContentPlaceHolder id="SidebarContent" runat="server" />
</asp:Panel>

Sub Page_Load(...)
    SidebarPanel.Visible = SidebarContent.HasControls
End Sub

这会在<div class="Sidebar">中呈现侧边栏内容(如果有的话) --并且避免在没有内容时在页面上创建一个空div。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18345469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档