7

我对 ASP.Net 很陌生,我不确定我是否以正确的方式进行。我有一个绑定到“图像”对象列表的中继器。每个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");
        }
    }
}

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>
4

2 回答 2

8

i.DataItem在事件中不可用(为空),btnImport_Click但仅在ItemDataBound事件中可用(如果我没记错事件名称)。

您可以使用 aHiddenField来存储 FileName 然后您必须调用i.FindControl.

于 2011-11-12T15:01:31.497 回答
0

我认为这个问题是在询问如何在回发时从转发器获取数据,更具体地说,如何与转发器中的 CheckBox 进行交互。因此,在另一个控件的回发中,如何执行此操作的示例是;

    protected void CheckBox_CheckedChanged(object sender, EventArgs e)
    {
        foreach (RepeaterItem ri in Repeater.Items)
        {
            foreach (Control c in ri.Controls)
            {
                if (typeof(CheckBox) == c.GetType())
                {
                    CheckBox checkBox = (CheckBox)c;
                    checkBox.Checked = true;
                }
            }
        }
    }
于 2014-02-07T07:49:54.983 回答