c# - 如何检查 ContentPlaceHolder 是否为空?

标签 c# asp.net

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

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

示例 Page.Master:

<asp:ContentPlaceHolder runat="server" ID="Content" />

示例测试.aspx:

<asp:Content runat="server" ContentPlaceHolderID="Content">
    Custom text without controls. Content.Controls.Count is 0 and Content.HasControls is false.
</asp:Content>

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

为同一个占位符尝试覆盖两次,但在动态加载时出现错误。

最佳答案

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

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);
}

关于c# - 如何检查 ContentPlaceHolder 是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18345469/

相关文章:

c# - 在 C# 运行时添加和删除标签页

c# - 当两个实例必须共享一个第三个实例时,我应该使用依赖注入(inject)吗?

asp.net - 使用 subversion 进行 asp.net 部署 - 导致 appdomain 回收

c# - div 背景颜色在 Firefox 中不起作用

c# - MVC 4 为什么我必须在服务器上而不是本地序列化?

c# - 如果我从 FormView.EditMode 更改为 FormView.InsertMode,dropdownlist.databind() 时出错

c# - 如何使用带有 Npoi 的数据集创建 Excel 电子表格

javascript - 使用 JavaScript 将 ajax 日历值转换为文本框模糊事件中的日期时间

c# - 如何避免这个 "A potentially dangerous Request"

c# - asp.net 回传上的 https 警告