Контейнерный элемент управления ASP.Net с несколькими коллекциями элементов управления - PullRequest
1 голос
/ 02 июня 2010

Я пытался создать специальный вид набора полей. Который делает все виды фантастических вещей, но в основном разрушается и поддерживает состояние. Также две части набора полей (в легенде и в остальных) должны быть доступны для кода (декларативно).

Код на странице или элементе управления должен выглядеть примерно так:

<myTagPrefix:Fieldset>
 <myTagPrefix:Legend>[controls here should be available in codebehind]</myTagPrefix:Legend>
 <myTagPrefix:Content>[controls here should be available in codebehind]</myTagPrefix:Content>
</myTagPrefix:Fieldset>

Или

<myTagPrefix:Fieldset>
 <Legend>[controls here should be available in codebehind]</Legend>
 <Content>[controls here should be available in codebehind]</Content>
</myTagPrefix:Fieldset>

Который более-менее генерирует следующий HTML-код (исключая магический сворачивающийся и поддерживающий состояние код):

<fieldset>
 <legend>[result of rendered legend controls]</legend>
 [result of rendered legend controls]
</fieldset>

Я посмотрел на шаблонный элемент управления, открывая контейнер шаблона через свойства, помеченные как 'TemplateContainer', и это хорошо работает, за исключением того факта, что код не может больше обращаться к элементам управления в шаблоне.

Я также изучил наследование элемента управления типа контейнера и переопределил методы рендеринга для тега начала и конца, что также хорошо, за исключением того, что он может содержать только одну коллекцию элементов управления, в то время как этот элемент управления fieldset должен иметь два (элементы управления в легенде и элементы управления в остальном наборе полей). Этого можно преодолеть, выставив текст легенды как свойство набора полей, но, чтобы не усложнять ситуацию, текст - не единственное, что должно отображаться в легенде. (например: изображения и кнопки могут отображаться тоже).

Конечно, этот вопрос можно рассматривать более абстрактно, я в основном спрашиваю контейнерный элемент управления с несколькими дочерними коллекциями.

Когда я попытался выяснить, с чем это сравнить, функциональность приблизилась к MultiView ; MultiView может содержать только элементы управления типа ' View ', а элементы управления View доступны в выделенном коде. Тот факт, что MultiView не ограничивает количество и уникальность его дочерних элементов управления, и мой элемент управления должен (максимум одна легенда и один элемент содержимого) - это то, с чем я мог бы жить ... пока;)

Кто-нибудь имеет представление о том, как был построен MultiView? Есть ли уловка, которую я пропускаю? Буду признателен за любую помощь или предложение.

...