本当にシンプルなテンプレートコントロールを作成しようとしています。これまでに行ったことはありませんが、過去に作成したコントロールの多くは、テンプレート機能を含めると非常に役立つことを知っています。そのため、現在学習しています。
私が抱えている問題は、テンプレートがページに出力されているのに、プロパティ値が出力されていないことです。したがって、取得するのは、テンプレートに含める静的テキストだけです。
コントロールがエラーを引き起こさないので、私は何かを正しくしているに違いありません。それで、それは私のパブリックプロパティが存在することを知っています。(たとえば、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>