Я думаю, вам просто нужно добавить [ParseChildren(false), PersistChildren(true)]
в класс, представляющий тег <MdsMenu:MenuItem/>
. Дочерние элементы управления, записанные внутри тега, должны быть доступны во время выполнения в свойстве Controls
элемента управления.
ОБНОВЛЕНИЕ: Я собрал быстрый тестовый проект, чтобы продемонстрировать, что это действительно работает. (Очевидно, людям нравится понижать голосование, фактически не оценивая, является ли ответ правильным.)
Этот пользовательский элемент управления имеет ожидаемое поведение:
[ParseChildren(false), PersistChildren(true)]
public partial class SuperDiv : System.Web.UI.UserControl
{
public override void RenderControl(HtmlTextWriter writer)
{
writer.Write("<div class=\"super\">");
writer.Write(Controls.Count);
foreach (Control i in Controls)
i.RenderControl(writer);
writer.Write("</div>");
}
}
Итак, следующая разметка ASP.NET:
<test:SuperDiv runat="server">
<asp:Label runat="server">Hello, World!</asp:Label>
</test:SuperDiv>
Результатом будет следующий HTML-код:
<div class="super">3
<span>Hello, World!</span>
</div>
(3 потому что два текстовых узла, содержащие только пробелы, также являются дочерними элементами элемента управления и метки.)