7

私はASP.Netにかなり慣れていないので、これが正しい方法で行われるかどうかはわかりません。「画像」オブジェクトのリストにバインドされているリピーターがあります。各RepeaterItem内にはチェックボックスがあり、チェックされたImageオブジェクトのいくつかの属性を表示したいボタンOnClickイベントがあります。

ラベルは更新されますが、メタデータは空白です。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は利用できません(nullです)btnImport_Clickが、イベントでのみ利用できますItemDataBound(イベント名を正しく思い出した場合)。

a を使用しHiddenFieldて FileName を格納できます。その後、 を呼び出す必要がありますi.FindControl

于 2011-11-12T15:01:31.497 に答える