加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – asp:ContentPlaceHolder和代码块问题

发布时间:2020-12-16 04:14:08 所属栏目:asp.Net 来源:网络整理
导读:当内容占位符包含任何代码块时,它会报告控件集合为空. 例如: MasterPage.aspx asp:ContentPlaceHolder ID="Content1" runat="server" /asp:ContentPlaceHolder ID="Content2" runat="server" /divContent1: %= Content1.Controls.Count %/divdivContent2: %
当内容占位符包含任何代码块时,它会报告控件集合为空.

例如:

MasterPage.aspx

<asp:ContentPlaceHolder ID="Content1" runat="server" />
<asp:ContentPlaceHolder ID="Content2" runat="server" />

<div>Content1: <%= Content1.Controls.Count %></div>
<div>Content2: <%= Content2.Controls.Count %></div>

APage.aspx

<asp:Content ContentPlaceHolderID="Content1" runat="server">
    Plain text content.
</asp:Content>

<asp:Content ContentPlaceHolderID="Content2" runat="server">
    <%= "Code block content." %>
</asp:Content>

这将呈现以下内容:

Plain text content. Code block content.

Content1: 1

Content2: 0

为什么母版页的ContentPlaceHolder.Controls集合为空?

我想检查是否已填充ContentPlaceHolder(另请参阅this question),但如果它包含任何<%= blocks则不能. 有没有人知道这方面的方法?

解决方法

按照承诺,我说我会看看.对不起我昨晚没有上传,漫长的一天,需要打干草!

所以,我正在检查ContentPlaceHolder.Controls集合的填充方式之间的差异.我注意到,当使用代码块时,它会翻转为只读.在任何其他方面,它将只是空或填充.

因此,我决定使用扩展方法为我们检查它:

ContentPlaceHolderExtensions.cs

public static class ContentPlaceHolderExtensions
{
    public static bool ContainsControlsOrCodeBlock(this ContentPlaceHolder placeHolder)
    {
        if (placeHolder.Controls.Count > 0)
             return true;

        return placeHolder.Controls.IsReadOnly;
    }
}

然后在母版页中检查:

的Site.Master

<asp:ContentPlaceHolder ID="Content1" runat="server" />
<asp:ContentPlaceHolder ID="Content2" runat="server" />
<asp:ContentPlaceHolder ID="Content3" runat="server" />

<div>Content1: <%= Content1.Controls.Count %></div>
<div>Content2: <%= Content2.Controls.Count %></div>
<div>Content3: <%= Content3.Controls.Count %></div>

<div>Content1 (Ex. Meth.): <%= Content1.ContainsControlsOrCodeBlock() %></div>
<div>Content2 (Ex. Meth.): <%= Content2.ContainsControlsOrCodeBlock() %></div>
<div>Content3 (Ex. Meth.): <%= Content3.ContainsControlsOrCodeBlock() %></div>

作为概念验证,我添加了一个内容页面:

的Index.aspx

<asp:Content ContentPlaceHolderID="Content1" runat="server">
Plain Text Content
</asp:Content>

<asp:Content ContentPlaceHolderID="Content2" runat="server">
<%= "Code block content" %>
</asp:Content>

并且所有都按预期呈现(我相信)..

TBH,虽然它并不完美..我不认为在这种情况下我们可以变得更加优雅.我不确定在这些不同的场景中如何设置其他控件集合,因此我只使用了ContentPlaceHolder控件.其他模板控件可能也可能不一样.

思考?

您可以从here下载该项目:

http://code.google.com/p/robcthegeek/source/browse/#svn/trunk/stackoverflow/964724

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读