ASP.net C# 转发器多个对象

本文关键字:对象 转发器 net ASP | 更新日期: 2023-09-27 18:31:48

我有以下情况:

<asp:Repeater ID="myRepeater" runat="server">
    <ItemTemplate> 
        <asp:ImageButton OnClick="imgSearchResult_Click" BackColor="#333333" ID="imgSearchResult" height="32" width="32" runat="server" ToolTip='<%# Eval("ToolTip") %>' ImageUrl='<%# Eval("ImageUrl") %>'/> 
        <asp:Label ID="labValue" Text='<%# Eval("Text") %>' runat="server" Width="32" />
    </ItemTemplate>
</asp:Repeater>

转发器包含图像按钮和标签对象。如果我只使用一个对象,我可以通过绑定从代码隐藏添加它们:

Repeater.DataSource = imageList;
Repeater.DataBind();

Repeater.DataSource = labelList;
Repeater.DataBind();

如何将两者添加到一个中继器中?

ASP.net C# 转发器多个对象

如果你在一个中继器中需要它们,它们在数据的"视图"(松散使用的术语)中是相关的。那么,为什么不将该视图变成包含图像和标签的显式对象呢?命名或匿名:

return Enumerable.Zip(imageList, labellist, (image, label) => new {image, label}) 

或者,您可以只传递图像并按索引查询标签:

<asp:Repeater ID="myRepeater" runat="server">
    <ItemTemplate> 
        <asp:Label ID="labValue" Text='<%# GetLabelText(Container.ItemIndex) %>' runat="server" Width="32" />
    </ItemTemplate>
</asp:Repeater>

这需要一个公共GetLabelText(index)方法,并且可能需要代码隐藏中的额外状态,以使 ImageList 可用于该方法。不是很好,但它可以完成工作。