我正在使用Repeater控件,其中我有一个ID标签,其ID为' imgGallery'。但在文件后面的代码中,我无法访问它。
ASPX
<div class="col-md-4 col-sm-12">
<div class="col-md-2">
<asp:Repeater ID="rptImage" runat="server">
<ItemTemplate>
<asp:Image ID="imgGallery" runat="server" />
</ItemTemplate>
</asp:Repeater>
</div>
</div>
aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
using (DBDataContext dt = new DBDataContext())
{
var frm = from i in dt.GalleryMasters
where i.CategoryId == 1
select i;
foreach (var item in frm)
{
Image img = (Image)rptImage.FindControl("imgGallery");
img.ImageUrl = item.Image;
((HtmlControl)(FindControl("ifrm"))).Attributes["src"] = item.Video;
}
}
}
如果我使用FindControl,则var为null。
答案 0 :(得分:1)
首先,您需要绑定转发器:
rptImage.DataSource = frm.ToList();
rptImage.DataBind();
在您看来应该可以这样做:
<asp:Image ID="imgGallery" runat="server" ImageUrl='<%# Eval("Video") %>' />
在代码背后,为了获得转发器中的项目,您需要迭代他的项目。单个项目包含您的图像控件。这应该有效:
foreach (RepeaterItem item in rptImage.Items) {
Image img = (Image)item.FindControl("imgGallery");
// Some other code
}
答案 1 :(得分:0)
如果要根据数据库结果在Repeater控件中绑定图像,则可以直接将数据源分配给Repeater控件,而不是查找图像控件。
同时Repeater没有任何记录,因此它不会找到转发器内部的任何控件,因为转发器中没有任何行。