0

我试图将图像列表(System.Web.UI.WebControls.Image)绑定到转发器,但图像显示为损坏。当我在 ItemDataBound 事件中放置一个断点时,似乎没问题,DataItem 是正确的并且具有正确的 ImageUrl。然而,结果是错误的。

这段代码非常简单,但最终会变得更加复杂。使用 ImageUrls绑定 aList<String>最终不会帮助我,因为所有图像也将具有更多独特的属性。

中继器:

<asp:Repeater ID="repButtons" runat="server" OnItemDataBound="repButtons_OnItemDataBound">
    <ItemTemplate>
        <asp:Image ID="imgButton" runat="server" />
    </ItemTemplate>
</asp:Repeater>

用图像制作列表:

List<System.Web.UI.WebControls.Image> myButtons = new List<System.Web.UI.WebControls.Image>();

Image myEditButton = new Image();
myEditButton.ImageUrl = "~/images/themes/pencil.png";

myButtons.Add(myEditButton);

repButtons.DataSource = myButtons;
repButtons.DataBind();

数据绑定:

protected void repButtons_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        Image myImage = (Image)e.Item.DataItem;

        Image imgButton = (Image)e.Item.FindControl("imgButton");

        imgButton = myImage;
    }
}
4

3 回答 3

1

如果您更改为使用 aPlaceHolder而不是Image

<ItemTemplate>
    <asp:PlaceHolder ID="imgPlaceholder" runat="server" />
</ItemTemplate>

然后在 DataBound 事件中将您的 Image 添加到此。

Image myImage = (Image)e.Item.DataItem;
PlaceHolder imgPlaceholder = (PlaceHolder)e.Item.FindControl("imgPlaceholder");
imgPlaceholder.Controls.Add(myImage);

您无法按照您尝试的方式执行此操作的原因是因为您基本上是在说imgButton现在是一个新创建的图像控件,而不是中继器中的那个。你认为你正在做的基本上是把它的所有属性myImage

于 2012-05-04T14:36:47.867 回答
0

创建并将 list<string> 绑定到中继器。列表中的每个字符串都是图像的 URL。更改转发器标记如下-->

<asp:Image ID="imgButton" runat="server" ImageUrl="DataBinder.Eval(Container.DataItem)" />
于 2012-05-04T13:57:31.603 回答
0

以下代码应该适合您:

<asp:Repeater ID="repButtons" runat="server" OnItemDataBound="repButtons_OnItemDataBound">
    <ItemTemplate>
        <asp:Image ID="imgButton" runat="server" ImageUrl='<%# Eval("ImageUrl") %>' />
    </ItemTemplate>
</asp:Repeater>

制作图像列表

List<System.Web.UI.WebControls.Image> myButtons = new List<System.Web.UI.WebControls.Image>();

Image myEditButton = new Image();
myEditButton.ImageUrl = "~/images/themes/pencil.png";

myButtons.Add(myEditButton);

repButtons.DataSource = myButtons;
repButtons.DataBind();

于 2012-05-04T15:44:16.737 回答