Как и обещал, я сказал, что посмотрю. Извините, я никогда не загружал прошлой ночью, долгий день, и мне нужно было ударить сено!
Итак, я проверял различия в коллекции 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. Другие шаблонные элементы управления могут работать или не работать одинаково.
Мысли
Вы можете скачать проект с здесь :
http://code.google.com/p/robcthegeek/source/browse/#svn/trunk/stackoverflow/964724