2009-11-05 2 views
1

Я ищу, чтобы создать WebControl, который может содержать разметку внутри него, и делать собственное динамическое создание дочерних элементов управления. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу (пока) визуализировать элементы управления, размещенные в разметке (см. Пример ниже) отдельно от дочерних элементов управления, которые я создаю.ASP.NET WebControl и рендеринг содержали детей

Я знаю, мне нужно создать класс с этими 2 флаги:

[ParseChildren(false)] 
[PersistChildren(true)] 
public class OuterControl : WebControl 
{ 
    ... 
} 

И пример разметки будет выглядеть следующим образом:

<custom:OuterControl> 
    <asp:TextBox ...> 
<custom:OuterControl> 

Внутри RenderContents(), у меня есть некоторые элементы управления, которые мне нужно добавить в дерево управления, визуализировать, а затем визуализировать те, которые завернуты в разметку в определенной части. Например .:

protected override void RenderContents(HtmlTextWriter output) 
{ 
    EnsureChildControls(); 
    [ Misc work, render my controls ] 

    [** Would like to render wrapped children here **] 

    [ Possibly other misc work ] 
} 

Как уже говорилось, я могу либо получить свой код, созданный управления дважды визуализации от вызова RenderChildren(), или завернутые управления, чтобы не оказывать на все путем удаления этой строки. Чёрт.

Мысли?

ответ

1

Когда я имел аналогичное требование (здание стандартный набор элементов управления вокруг управления входят в комплект), я в конечном итоге делает что-то вроде этого:

EnsureChildControls(); 

Control[] currentControls = new Control[Controls.Count]; 

if (HasControls()) { 
    Controls.CopyTo(currentControls, 0); 
    Controls.Clear(); 
} 

// Misc work, add my controls, etc, e.g. 
Panel contentBox = new Panel { ID = "Content", CssClass = "content_border" }; 
// at some point, add wrapped controls to a control collection 
foreach (Control currentControl in currentControls) { 
    contentBox.Controls.Add(currentControl); 
} 

// Finally, add new controls back into Control collection 
Controls.Add(contentBox); 

Который держится довольно хорошо.

 Смежные вопросы

  • Нет связанных вопросов^_^