2012-03-21 27 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 2012-03-21 00:37:24

回答

0

要捆绑你需要调用自定义控件的DataBind方法的价值。

调用

ucTemplateControl.DataBind(); 
从页面

取得的模板要绑定的数据。

相关问题