代码之家  ›  专栏  ›  技术社区  ›  Waleed Eissa

在运行时切换转发器的项模板

  •  1
  • Waleed Eissa  · 技术社区  · 15 年前

    是否可以为转发器的itemtemplate定义多个模板,并根据某些条件在它们之间进行切换?

    我使用转发器查看文章列表,但希望对属于当前用户的行具有不同的视图(例如,包含用于删除文章的链接按钮)

    如果这不可能,那么是否可以在中继器的itemtemplate中使用多视图控件?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Waleed Eissa    15 年前

    我尝试在itemtemplate中使用多视图控件,它工作得很好,希望这能帮助有相同问题的人:

    <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>
    
        2
  •  0
  •   Tom    15 年前

    我不知道是否可以在模板之间切换,但我发现 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属性来修改视觉外观。如果有更激进的布局更改,我将把每个布局选项放在一个占位符中,并使用逻辑来确定要显示哪个占位符。