В пользовательском серверном элементе управления я просто записываю количество дочерних элементов управления.
Есть ли причина, по которой счетчик стал бы равным нулю, если теги <%%> используются в теле тегов управления?
Вот мой чрезвычайно упрощенный элемент управления:
public class Script : Control
{
public override void RenderControl(HtmlTextWriter writer)
{
writer.Write(this.Controls.Count.ToString());
}
}
Когда передаются только литеральные данные, записанное число равно 1, как и ожидалось:
<my:Script runat="server" ID="script3" >
function foo(){}
</my:Script>
Когда передаются литеральные данные и некоторые вычисленные данные, счетчик обнуляется:
<my:Script ID="Script1" runat="server" >
function foot(){}
<%=String.Empty %>
</my:Script>
В String.Empty нет ничего особенного. Все, что я здесь добавлю, приведет к нулю.
Интересно, что другие теги Control работают нормально. Следующие пункты 3:
<my:Script runat="server" ID="Script2">
hi
<asp:HyperLink runat="server" NavigateUrl="/" Text="hi" />
</my:Script>
Есть ли другой способ получить дочерний "контент" пользовательского элемента управления? Я бы подумал, что есть какой-то способ, но он может проверять только метаданные для System.Web.UI.WebControls.Content, но не реализацию.