2012-03-21 1 views
2

Я пытаюсь следующее:Как создать пользовательский элемент управления с помощью INamingContainer?

[PersistenceMode(PersistenceMode.InnerProperty)] 
[TemplateContainer(typeof(TemplateContainer))] 
public virtual ITemplate LayoutTemplate { get; set; } 

protected void Page_Init(object sender, EventArgs e) 
{ 
    this.Controls.Clear(); 

    if (LayoutTemplate != null) 
    { 
     var data = Enumerable.Range(0, 10); 

     foreach (int index in data) 
     { 
      TemplateContainer container = new TemplateContainer(index); 

      LayoutTemplate.InstantiateIn(container); 

      this.Controls.Add(container); 
     } 
    } 
} 

Мой класс-контейнер:

public class TemplateContainer : Control, INamingContainer 
{ 
    public int Index { get; set; } 

    internal TemplateContainer(int index) 
    { 
     this.Index = index; 
    } 
} 

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

<uc:TemplateControl ID="ucTemplateControl" runat="server"> 
    <LayoutTemplate> 
     <b>Index:</b> 
     <asp:TextBox ID="Literal1" runat="server" 
      Text='<%# Container.Index %>' 
      ReadOnly="true" /> 
     <br /> 
    </LayoutTemplate> 
</uc:TemplateControl> 

Но по какой-то причине Container.Index не делает никакого значения, просто пустой , Создаются 10 элементов управления, но ни один из них не показывает значение.

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

я пытался что-то похожее на пример MSDN:

+0

Полный файл управления: https://github.com/brunolm/Exam-70-515/blob/master/WebApplication/Ch07/TemplateControl.ascx.cs – BrunoLM

ответ

0

Чтобы связать значение, которое необходимо вызвать DataBind метод таможенного контроля.

Вызов

ucTemplateControl.DataBind(); 

со страницы сделаны данные, которые будут связаны на шаблоне.