gpt4 book ai didi

c# - 具有多个模板的 ASP Repeater 控件

转载 作者:行者123 更新时间:2023-11-30 17:47:21 26 4
gpt4 key购买 nike

我怎样才能拥有一个带有多个模板的转发器控件,其中根据项目的类型选择模板?

这是我目前拥有的:

我的中继器类:

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

然后我将转发器控件绑定(bind)到 LifestreamItem 的 IEnumerable,它是多个不同社交网络帖子类型的基类,因此可能有 TwitterLifestreamItem 和 VimeoLifestreamItem,我希望转发器选择不同的模板,具有不同的可能值,具体取决于在数据项上。

最佳答案

看来解决方案是像这样覆盖DataBind方法:

    public override void DataBind()
{
foreach (var item in (IEnumerable<LifestreamItem>)this.DataSource)
{
if (item is LifestreamTwitterItem)
{
TwitterTemplate.InstantiateIn(item); // instantiate inside the item which is also a control.
}
else
{
ItemTemplate.InstantiateIn(item);
}
item.DataBind(); // bind the item
Controls.Add(item); // add the item to the repeater
}
}

关于c# - 具有多个模板的 ASP Repeater 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24869237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com