私はASP.Netにはかなり新しく、正しい方法を考えているのか分かりません。私は "イメージ"オブジェクトのリストにバインドされているリピーターを持っています。各RepeaterItem内にはチェックボックスがあり、チェックされたImageオブジェクトのいくつかの属性を表示するボタンOnClickイベントがあります。ASP.Net - RepeaterItemからデータを取得する
ラベルは更新されますが、メタデータは空白です。 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>
'DataItem'プロパティは、' ItemDataBound'イベントのポストバックの前にのみ使用できます。これはMSDNではうまく指摘されていませんが、すべてのASP.NETコントロールで一貫しています – jwiscarson