Передача пользовательских элементов управления в качестве переменных - PullRequest
0 голосов
/ 25 января 2010

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

private void RenderControls()
{
    foreach (UserControl CurrentControl in this.ControlsToRender)
    {
        MyPlaceholder.Controls.Add(CurrentControl)
    }

}

Это работает в том смысле, что в заполнитель добавляются правильные элементы управления, однако ничего не отображается. Предположительно, это потому, что у него нет разметки в файле asxc.

Если я сделаю что-то подобное

private void RenderControls()
{
    foreach (UserControl CurrentControl in this.ControlsToRender)
    {
        MyPlaceholder.Controls.Add(this.LoadControl("path to ascx file")
    }
}

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

я хочу создать экземпляры элементов управления else, где установить соответствующие свойства, а затем просто передать их набор в элемент управления визуализацией для визуализации.

Есть ли способ сделать это с помощью пользовательских элементов управления? Должен ли я вместо этого создавать собственные элементы управления?

Ответы [ 2 ]

1 голос
/ 25 января 2010
Пользовательские элементы управления

.ascx сложно преобразовать в переносимые переносимые компоненты. Есть способы сделать это, но они имеют много ограничений и требуют нескольких шагов. В конце концов, это того не стоит.

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

0 голосов
/ 25 января 2010

Вы можете сделать и то и другое, но для меня это звучит так, как если бы вы могли использовать пользовательские элементы управления.

Вы можете использовать пользовательские элементы управления, выставив свойства на пользовательский элемент управления.

MyPlaceholder.Controls.Add(CurrentControl)

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

в качестве альтернативы вы можете установить свойства в любое время перед рендерингом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...