ASP.Net - 从RepeaterItem获取数据

Ant*_*t P 6 c# asp.net checkbox repeater dataitem

我是ASP.Net的新手,我不确定我是否会以正确的方式解决这个问题.我有一个Repeater,它绑定到一个"图像"对象列表.在每个RepeaterItem内是一个复选框,我有一个按钮OnClick事件,我想显示已检查的Image对象的一些属性.

标签更新,但元数据为空.DataBinder.Eval(i.DataItem,"FileName")将返回null,但我不确定为什么?我想也许复选框的回发导致了问题,但是如果我尝试在发生任何回发之前显示数据,我仍然会遇到同样的问题,所以也许我没有正确地获取属性.或者我是以完全错误的方式解决这个问题?任何帮助赞赏.

码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string importPath = Server.MapPath("~/Images/ForImport");
        ImageProcessor processor = new ImageProcessor(importPath);

        rptImageList.DataSource = processor.ImageList;
        rptImageList.DataBind();
    }
}

protected void btnImport_Click(object sender, EventArgs e)
{
    foreach (RepeaterItem i in rptImageList.Items)
    {
        CheckBox chk = i.FindControl("chkSelectImage") as CheckBox;
        if (chk.Checked)
        {
            Testlabel.Text += "Selected: " + DataBinder.Eval(i.DataItem, "FileName");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

HTML:

<asp:Repeater ID="rptImageList" runat="server">
    <ItemTemplate>
    <div class="photoinstance">
        <asp:Image runat="server" ImageUrl='<%#"Images/ForImport/" +DataBinder.Eval(Container.DataItem, "FileName") %>' />
        <asp:CheckBox ID="chkSelectImage" AutoPostBack="true" runat="server"/>
        <p><%#Eval("FileName")%> - <%#Eval("FileSize")%> bytes</p>
        </div>
    </ItemTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)

Adr*_*ode 8

i.DataItem在btnImport_Click中不可用(为空),仅在ItemDataBound事件中可用(如果我没记错事件名称).
您可以使用HiddenField存储FileName,然后您必须调用i.FindControl.