2012-03-21 11 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の例と似たような試みた:あなたはカスタムコントロールのDataBindメソッドを呼び出す必要が値をバインドするには

+0

フルコントロールファイル:https://github.com/brunolm/Exam-70-515/blob/master/WebApplication/Ch07/TemplateControl.ascx.cs – BrunoLM

答えて

0

を。ページから

ucTemplateControl.DataBind(); 

を呼び出す

は、データをテンプレートに拘束されることになりました。

関連する問題