Контент в пользовательском элементе управления - PullRequest
4 голосов
/ 25 сентября 2010

Я почти смущен, чтобы задать этот вопрос, но здесь мы идем ...

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

Цель состоит в том, чтобы создать пользовательский элемент управления, который бы представлял собой сложную структуру HTML-элементов и CSS, чтобы сформировать элегантный контейнерный блок. Проблема заключается в том, как заполнить содержимое поля, так как каждый экземпляр usercontrol будет иметь свой собственный индивидуальный HTML-контент. Контейнер содержимого div usercontrol будет вложен глубоко в структуру рендеринга html. Нежелательно программно устанавливать содержимое usercontrol или использовать свойства.

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

<usercontrol Title="Some Title"><p>some random html content</p></usercontrol>

Пример визуализированного пользовательского элемента управления будет:

<div class="CommonBox">
    <div class="Title">Some Title</div>
    <div class="Content"><p>some random html content</p></div>
</div>

Надеюсь, мои объяснения адекватны. Имеет ли это смысл для кого-либо или желаемая функциональность недостижима?

Ура!

EDIT

Я попытался предложить шаблонное пользовательское управление в надежде найти достойное решение. Я «отступил» на этот сайт и теперь у меня есть рабочий шаблонный пользовательский элемент управления. Мой следующий вопрос: как я могу программно получить доступ к элементам управления, вложенным в шаблон ... скажем, в шаблоне «Описание» есть ссылка на текстовое поле из примера ссылки, и я хочу установить его значение программно? Это возможно?

Ответы [ 3 ]

3 голосов
/ 25 сентября 2010

То, что вы ищете, определенно возможно. Одним из решений является создание templated user control. В конце вы можете определить содержание, подобное тому, как выглядит ваш пример. Что-то вроде:

<uc:MyControl Title="Some TItle" runat="server">
    <ContentsTemplate>
        <p>some random html content</p>
    </ContentsTemplate>
</uc:MyControl>

Вот простые инструкции . Я делал это в прошлом с успехом. По этой теме в Google также найдено множество ресурсов .

0 голосов
/ 25 сентября 2010

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

Свойство Title для отображения содержимого первого внутреннего div,

Content для второго.Если вы хотите установить содержимое внутри своего серверного элемента управления, вы должны использовать атрибут [PersistenceMode(PersistenceMode.InnerDefaultProperty)] для своего свойства, например:

[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string Contents
{
    get
    {
        string contents = (string)ViewState["Contents"];
        return (contents == null) ? String.Empty : contents;
    }
    set
    {
        ViewState["Contents"] = value;
    }
}

PersistenceModeAttribute объясняется в MSDN так:

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

Для получения дополнительной информации посмотрите последний пример здесь .

0 голосов
/ 25 сентября 2010

Да, это очень возможно. Сначала вы можете создать собственный элемент управления, как я опишу в этом посте. Свойства в элементе управления становятся атрибутами, такими как "Заголовок", который вы имеете в своем примере. Затем вы можете расширить свой контроль с помощью методики, показанной в этом посте , чтобы добавить дочерние узлы для других HTML-входов, которые вам потребуются.

Наслаждайтесь!

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