我们有一堆具有不同HeaderTemplates和FooterTemplates的转发器。但是,ItemTemplate对于所有这些都是相同的。我们如何在一堆中继器之间共享ItemTemplate?
<asp:Repeater>
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><%# Eval("title") %></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<asp:Repeater>
<HeaderTemplate>
<ol>
</HeaderTemplate>
<ItemTemplate>
<li><%# Eval("title") %></li>
</ItemTemplate>
<FooterTemplate>
</ol>
</FooterTemplate>
</asp:Repeater>
<asp:Repeater>
<HeaderTemplate>
<p>This is some intro text.</p>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><%# Eval("title") %></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
答案 0 :(得分:0)
与may评论相关,我建议尝试以下方法:定义一个唯一的OnItemDataBound事件,并将其作为所有那些Repeater。通过这种方式,您可以在一个地方生成项目,代码在后面。
例如,在你的aspx中:
<asp:Repeater runat="server" id="repeaterA" OnItemDataBound="CommonItemDataBound">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<asp:Literal runat="server" ID="HtmlContents"></asp:Literal>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<asp:Repeater runat="server" id="repeaterB" OnItemDataBound="CommonItemDataBound">
<HeaderTemplate>
<ol>
</HeaderTemplate>
<ItemTemplate>
<asp:Literal runat="server" ID="HtmlContents"></asp:Literal>
</ItemTemplate>
<FooterTemplate>
</ol>
</FooterTemplate>
</asp:Repeater>
然后,在你的代码背后:
protected void CommonItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
((Literal)e.Item.FindControl("HtmlContents")).Text = string.Format("<li>{0}</li>", DataBinder.Eval(e.Item.DataItem, "title").ToString())
}
}
答案 1 :(得分:0)
我认为你从示例前瞻性中只显示了Itemtemplate
中的一个元素,实际上你可能有更多元素要分享。当涉及到ASP.NET中的Resuable控件时,我想到了一件事,那就是UserControls
,所以你可以通过创建一个这样的控件来实现: -
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="RepeaterUC.ascx.cs"
Inherits="Demo.RepeaterUserControl" %>
<li><%# Eval("title") %></li>
最后在您的页面中注册并使用它: -
<%@ Register TagName="Fruits" TagPrefix="RC" Src="~/RepeaterUserControl.ascx" %>
<ItemTemplate>
<RC:Fruits runat="server"></RC:Fruits>
</ItemTemplate>
...........and so on for other controls.