Я пытаюсь создать шаблоны для моего серверного элемента управления (шаблон подписи и шаблон содержимого).Создание шаблона управления сервером asp.net
<uc:MyControl ID="myConrol1" runat="server">
<CaptionTemplate>
<%# Eval("MyCaption") %>
</CaptionTemplate>
<ContentTemplate>
<b><%# Eval("MyContent") %></b>
</ContentTemplate>
</uc:MyControl>
А затем дать шаблоны с источником данных
var ds = new List<CarouselItem>
{
new CarouselItem()
{
MyCaption = "Slide 1 caption",
MyContent = "Slide 1 content"
},
new CarouselItem()
{
MyCaption = "Slide 2 caption",
MyContent = "Slide 2 content"
}
};
myConrol1.DataSource = ds;
myConrol1.DataBind();
Однако то, что я пытался не работает для меня. Вот код, который я пытался достичь этой функциональности.
[Browsable(false), DefaultValue(null), Description("The content template."), TemplateContainer(typeof(MyItemContainer)), PersistenceMode(PersistenceMode.InnerProperty)]
public virtual ITemplate ContentTemplate { get; set; }
[Browsable(false), DefaultValue(null), Description("The caption template."), TemplateContainer(typeof(MyItemContainer)), PersistenceMode(PersistenceMode.InnerProperty)]
public virtual ITemplate CaptionTemplate { get; set; }
Затем я создал
public class MyItemContainer : WebControl, INamingContainer
{
private readonly MyItem item;
public MyItemContainer (MyItem ai)
{
item = ai;
}
public MyItem DataItem
{
get { return item; }
}
}
А потом в методе связывания писал InstantiateIn к этому классу
foreach (object dataSourceObject in ds)
{
var item = new MyItem
{
Caption = new PlaceHolder(),
Content = new PlaceHolder(),
DataItem = dataSourceObject
};
if (ContentTemplate != null)
{
MyAccordionItemContainer cc = new MyAccordionItemContainer(item);
ContentTemplate.InstantiateIn(cc);
item.Content.Controls.Add(cc);
}
if (CaptionTemplate != null)
{
MyAccordionItemContainer cc = new MyAccordionItemContainer(item);
CaptionTemplate.InstantiateIn(cc);
item.Caption.Controls.Add(cc);
}
item.DataBind();
}
Нет все в странице не пусто и не переплетены. Кажется, я не использую dataSourceObject
в процессе создания экземпляра, но я не уверен, как его использовать. Есть ли здесь какие-нибудь идеи?