【发布时间】:2014-07-21 15:47:28
【问题描述】:
我怎样才能有一个带有多个模板的转发器控件,其中选择的模板是基于项目的类型?
这是我目前拥有的:
我的复读班:
[ToolboxData("<{0}:LifestreamRepeater runat=server>")]
public class LifestreamRepeater : Repeater
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate TwitterTemplate {get; set;}
protected override void OnDataBinding(EventArgs e)
{
//base.OnDataBinding(e);
foreach (var item in (IEnumerable<LifestreamItem>)this.DataSource)
{
if (item is LifestreamTwitterItem)
{
LifestreamRepeaterItem ri = new LifestreamRepeaterItem(item);
TwitterTemplate.InstantiateIn(item);
}
else
{
ItemTemplate.InstantiateIn(item);
}
}
}
}
和前端:
<lfs:LifestreamRepeater runat="server" ID="repeater1">
<TwitterTemplate>
<div class="Lifestream Twitter Item">
<h4> <%# DataBinder.Eval(Container.DataItem, "Title")%> </h4>
<p> <%# DataBinder.Eval(Container.DataItem, "Body")%> </p>
</div>
</TwitterTemplate>
<ItemTemplate>
<div class="Lifestream Item">
<h2> <%# DataBinder.Eval(Container.DataItem, "Title")%> </h2>
<p> <%# DataBinder.Eval(Container.DataItem, "Body")%> </p>
</div>
</ItemTemplate>
</lfs:LifestreamRepeater>
然后我将转发器控件绑定到 LifestreamItem 的 IEnumerable,它是多个不同社交网络帖子类型的基类,因此可能存在 TwitterLifestreamItem 和 VimeoLifestreamItem,我希望转发器选择具有不同可能值的不同模板,具体取决于在数据项上。
【问题讨论】:
-
这是一个有用的链接,显示所有必需的模板属性(否则并非所有功能都可以使用,例如
Container.ItemIndex):docs.microsoft.com/en-us/dotnet/api/…