是否可以为Repeater的ItemTemplate定义多个模板,并根据某些条件在它们之间切换?
我使用转发器查看帖子列表,但希望对属于当前用户的行有不同的视图(例如,包含用于删除帖子的LinkButton)
如果无法做到这一点,那么可以在Repeater的ItemTemplate中使用Multiview控件吗?
答案 0 :(得分:2)
我尝试在ItemTemplate中使用MultiView控件,它运行得很好,希望这可以帮助有同样问题的人:
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
<ItemTemplate>
<asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="<%# ((Post)Container.DataItem).Member.ID == CurrentMemberID ? 1 : 0 %>">
<asp:View ID="View1" runat="server"><!-- some links --></asp:View>
<asp:View ID="View2" runat="server"><asp:LinkButton CommandName="DeletePost" CommandArgument="<%# ((Post)Container.DataItem).Id %>" ID="LinkButton1" runat="server">Delete Post</asp:LinkButton></asp:View>
</asp:MultiView>
</ItemTemplate>
</asp:Repeater>
答案 1 :(得分:0)
我不知道是否可以在模板之间切换,但我发现Repeater.OnItemDataBound事件对修改单个转发器项目的显示最有用。
例如,要显示基于当前用户的链接按钮...
protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
LinkButton = e.Item.FindControl("btnDelete");
LinkButton.Visible = (e.Item.DataItem as DataRow)["CreatedBy"] == getCurrentUser();
}
通常,我保持每个转发器项的数据布局一致,并通过更改模板中控件的CssStyle和Visible属性来修改视觉外观。如果有更多激进的布局更改,我会将每个布局选项放在占位符中,并使用逻辑来确定要显示的占位符。