我试图将图像列表(System.Web.UI.WebControls.Image
)绑定到转发器,但图像显示为已损坏。当我在ItemDataBound事件中放置断点时,似乎没关系,DataItem是正确的并且具有正确的ImageUrl。然而,结果是错误的。
这段代码很简单,但最后会更复杂。将List<String>
与ImageUrls绑定最终不会帮助我,因为所有图像都将具有更多独特的属性。
中继器:
<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;
}
}
答案 0 :(得分:1)
如果您更改为使用PlaceHolder
而不是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
现在是一个新创建的图像控件,而不是Repeater中的那个。你在想你正在做的是基本上采用myImage
答案 1 :(得分:0)
创建并绑定列表&lt; string&gt;转发。列表中的每个字符串都是图像的URL。更改转发器标记如下 - &gt;
<asp:Image ID="imgButton" runat="server" ImageUrl="DataBinder.Eval(Container.DataItem)" />
答案 2 :(得分: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();