C# 创建一个简单的模板控件。有问题

C# 创建一个简单的模板控件。有问题,c#,asp.net,templates,custom-server-controls,servercontrols,C#,Asp.net,Templates,Custom Server Controls,Servercontrols,我试图创建一个非常简单的模板控件。我以前从未这样做过,但我知道如果我加入模板能力,我在过去创建的很多控件都会受益匪浅,所以我现在正在学习 我的问题是,我的模板在页面上输出,但我的属性值没有输出。因此,我得到的只是包含在模板中的静态文本 我必须正确地执行某些操作,因为控件不会导致任何错误,因此它知道我的公共属性存在。(例如,如果我尝试使用Container.ThisDoesTextist,它会引发异常) 我希望能在这方面得到一些帮助。我可能只是一个完全的木偶,错过了一些东西。关于简单模板服务器控件

我试图创建一个非常简单的模板控件。我以前从未这样做过,但我知道如果我加入模板能力,我在过去创建的很多控件都会受益匪浅,所以我现在正在学习

我的问题是,我的模板在页面上输出,但我的属性值没有输出。因此,我得到的只是包含在模板中的静态文本

我必须正确地执行某些操作,因为控件不会导致任何错误,因此它知道我的公共属性存在。(例如,如果我尝试使用Container.ThisDoesTextist,它会引发异常)

我希望能在这方面得到一些帮助。我可能只是一个完全的木偶,错过了一些东西。关于简单模板服务器控件的在线教程似乎很少,所以如果你知道其中一个,我想了解一下

下面是我的代码的精简版本

非常感谢,, 詹姆斯

以下是我的控件代码:

[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>

正文如下:

您应该在控件上调用方法DataBind

一种可能是在CreateChildControls()方法中添加数据绑定调用:

受保护的覆盖无效CreateChildControls() { 控件。清除()


你是一个救世主。太棒了。非常感谢-我知道这会很简单!学习还在继续…干杯,詹姆斯
    theContainer = new TemplatedControlContainer("Hello World");

    this.ItemTemplate.InstantiateIn(theContainer);

    Controls.Add(theContainer);

    this.DataBind();

}