Kei*_*ith 7 asp.net asp.net-mvc master-pages
当内容占位符包含任何代码块时,它会报告控件集合为空.
例如:
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>
Run Code Online (Sandbox Code Playgroud)
APage.aspx
<asp:Content ContentPlaceHolderID="Content1" runat="server">
Plain text content.
</asp:Content>
<asp:Content ContentPlaceHolderID="Content2" runat="server">
<%= "Code block content." %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
这将呈现以下内容:
纯文本内容.代码块内容.
内容1:1
内容2:0
为什么母版页的ContentPlaceHolder.Controls集合为空?
我想检查是否已填充ContentPlaceHolder(另请参阅此问题)但如果它包含任何<%=块则不能.
有没有人知道这方面的方法?
按照承诺,我说我会看看.对不起,我昨晚没有上传,漫长的一天,需要打干草!
所以,我正在检查ContentPlaceHolder.Controls它们如何填充之间的集合差异.我注意到,当使用代码块时,它会翻转为只读.在任何其他方面,它将只是空或填充.
因此,我决定引入一个扩展方法来为我们检查它:
public static class ContentPlaceHolderExtensions
{
public static bool ContainsControlsOrCodeBlock(this ContentPlaceHolder placeHolder)
{
if (placeHolder.Controls.Count > 0)
return true;
return placeHolder.Controls.IsReadOnly;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在母版页中检查:
<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>
Run Code Online (Sandbox Code Playgroud)
作为概念验证,我随后添加了一个内容页面:
<asp:Content ContentPlaceHolderID="Content1" runat="server">
Plain Text Content
</asp:Content>
<asp:Content ContentPlaceHolderID="Content2" runat="server">
<%= "Code block content" %>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
并且所有都按预期呈现(我相信)..
TBH,虽然它并不完美 ..我不认为在这种情况下我们可以变得更加优雅.我不确定在这些不同的场景中如何设置其他控件集合,因此我只使用了ContentPlaceHolder控件.其他模板控件可能也可能不一样.
思考?
您可以从这里下载项目:
http://code.google.com/p/robcthegeek/source/browse/#svn/trunk/stackoverflow/964724