Как и обещал, я сказал, что посмотрю. Извините, я так и не загрузил вчера вечером, долгий день, и мне нужно было убрать сено!
Итак, я проверял 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.
person
Rob Cooper
schedule
09.06.2009