2011-11-12 39 views
6

ASP.Net'e oldukça yeni geldim ve bu konuda doğru şekilde gittiğimden emin değilim. "Görüntü" nesneleri listesine bağlı bir Tekrarlayıcı var. Her RepeaterItem içinde bir onay kutusu ve kontrol edilen Image nesnelerinin bazı özelliklerini görüntülemek istediğim bir OnClick olayı düğmem var.ASP.Net - RepeaterItem'den veri alma

Etiket güncelleniyor, ancak meta veriler boş. DataBinder.Eval (i.DataItem, "DosyaAdı") null geri geliyor, ama emin değilim neden? Muhtemelen onay kutusundaki geri gönderme sorunlara yol açtığını sanıyordum, ancak herhangi bir geri gönderme gerçekleşmeden önce verileri görüntülemeye çalışırsam yine de aynı sorunu yaşıyorum, bu yüzden öznitelikleri doğru bir şekilde almadım. Yoksa bunu tamamen yanlış yoldan mı yapıyorum? Herhangi bir yardım takdir edildi.

Kodu:

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> 
+1

'DataItem' özelliği yalnızca ItembackBound' olayında, geri gönderilmeden önce kullanılabilir. Bu, MSDN üzerinde çok iyi bir şekilde belirtilmemiş, ancak tüm ASP.NET denetimleri boyunca tutarlı – jwiscarson

cevap

8

i.DataItem kullanılamaz, btnImport_Click de (boş) Ben doğru olay adı hatırlayacak olursak (sadece ItemDataBound etkinliğinde kullanılabilir).
DosyaAdı saklamak için bir HiddenField kullanabilirsiniz, sonra i.FindControl çağırmanız gerekir.

0

Bu sorunun bir tekrarlayıcıdan geri gönderme sırasında nasıl elde edileceğini ve daha spesifik olarak tekrarlayıcıda bulunan bir CheckBox ile nasıl etkileşim kurulacağını sorduğumu düşünüyorum. Yani başka bir kontrolün geri gönderilmesinde bunun nasıl yapılacağına dair bir örnek;

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; 
       } 
      } 
     } 
    } 
İlgili konular