Создание простого шаблонного элемента управления.Возникли проблемы - PullRequest
4 голосов
/ 08 апреля 2010

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

Проблема, которую я имею, состоит в том,что мой шаблон выводится на странице, но значение моего свойства - нет.Поэтому все, что я получаю, - это статический текст, который я включаю в свой шаблон.

Я должен что-то делать правильно, потому что элемент управления не вызывает ошибок, поэтому он знает, что мое публичное свойство существует.(например, если я пытаюсь использовать Container.ThisDoesntExist, он выдает исключение).

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

Ниже приведена сокращенная версия моего кода.

Большое спасибо, Джеймс

Вот мой код для элемента управления:

[ParseChildren(true)]
public class TemplatedControl : Control, INamingContainer
{
    private TemplatedControlContainer theContainer;

    [TemplateContainer(typeof(TemplatedControlContainer)), PersistenceMode(PersistenceMode.InnerProperty)]
    public ITemplate ItemTemplate { get; set; }

    protected override void CreateChildControls()
    {
        Controls.Clear();

        theContainer = new TemplatedControlContainer("Hello World");

        this.ItemTemplate.InstantiateIn(theContainer);

        Controls.Add(theContainer);
    }
}

Вот мой код для контейнера:

[ToolboxItem(false)] 
public class TemplatedControlContainer : Control, INamingContainer
{
    private string myString;

    public string MyString
    {
        get
        {
            return myString;
        }
    }

    internal TemplatedControlContainer(string mystr)
    {
        this.myString = mystr;
    }
}

Вот моя разметка:

<my:TemplatedControl runat="server">
    <ItemTemplate>
        <div style="background-color: Black; color: White;">
            Text Here: <%# Container.MyString %>
        </div> 
    </ItemTemplate>
</my:TemplatedControl>

1 Ответ

1 голос
/ 09 апреля 2010

Вы должны вызвать метод DataBind для вашего элемента управления.

одна возможность - добавить вызов DataBind в метод CreateChildControls ():

защищенное переопределение void CreateChildControls () { Controls.Clear ();

    theContainer = new TemplatedControlContainer("Hello World");

    this.ItemTemplate.InstantiateIn(theContainer);

    Controls.Add(theContainer);

    this.DataBind();

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