0
我正在尝试为我的服务器控件(标题模板和内容模板)创建模板。创建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
,但我不确定如何使用他。有没有人有任何想法吗?