Sono abbastanza nuovo su ASP.Net e non sono sicuro che lo farò nel modo giusto. Ho un ripetitore che è associato a un elenco di oggetti "Immagine". All'interno di ogni oggetto Repeater è presente una casella di controllo e ho un evento OnClick del pulsante, che desidero visualizzare alcuni attributi degli oggetti immagine selezionati.ASP.Net - Recupero dati da RepeaterItem
L'etichetta si aggiorna, ma i metadati sono vuoti. DataBinder.Eval (i.DataItem, "FileName") restituisce null, ma non sono sicuro del perché? Ho pensato che forse il postback dalla casella di controllo stava causando problemi, ma ho ancora lo stesso problema se provo a visualizzare i dati prima che si verifichino eventuali postback, quindi forse non sto recuperando gli attributi correttamente. O sto andando in questo modo completamente nel modo sbagliato? Qualsiasi aiuto apprezzato.
Codice:
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>
La proprietà 'DataItem' è sempre disponibile solo prima del postback, nell'evento' ItemDataBound'. Questo non è indicato molto bene su MSDN, ma è coerente in tutti i controlli ASP.NET – jwiscarson