Контент в пользовательском элементе управления

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

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

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

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

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

Примером обработанного usercontrol будет:

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

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

Ура!

РЕДАКТИРОВАТЬ

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

3 ответа

Решение

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

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

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

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

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

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

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

Контент для второго. Если вы хотите установить содержимое внутри вашего серверного элемента управления, вы должны использовать [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 указывает, что визуальный конструктор должен сохранять свойство, к которому применяется атрибут, в качестве внутреннего свойства по умолчанию. Это означает, что визуальный дизайнер сохраняет свойство в тегах элемента управления. Атрибут может быть применен только к одному свойству, поскольку только одно свойство может быть сохранено в тегах элемента управления. Значение свойства не заключено в специальный тег.

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

Другие вопросы по тегам