2011-11-12 18 views
6

Soy bastante nuevo en ASP.Net y no estoy seguro de que vaya por el buen camino. Tengo un repetidor que está vinculado a una lista de objetos de "Imagen". Dentro de RepeaterItem hay una casilla de verificación y tengo un botón Evento OnClick, que quiero mostrar algunos atributos de los objetos de Imagen marcados.ASP.Net - Obtención de datos de RepeaterItem

La etiqueta se actualiza, pero los metadatos están en blanco. DataBinder.Eval (i.DataItem, "FileName") regresa nulo, pero no estoy seguro de por qué? Pensé que quizás la devolución de la casilla de verificación estaba causando problemas, pero igual recibo el mismo problema si trato de mostrar los datos antes de que se hayan producido las devoluciones, así que tal vez no estoy obteniendo los atributos correctamente. ¿O estoy haciendo esto de una manera completamente incorrecta? Cualquier ayuda apreciada.

Código:

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

La propiedad 'DataItem' solo está disponible antes de la devolución de datos, en el evento' ItemDataBound'. Esto no se señala muy bien en MSDN, pero es coherente en todos los controles ASP.NET – jwiscarson

Respuesta

8

i.DataItem no está disponible (es nulo) en btnImport_Click, sólo está disponible en el evento ItemDataBound (si no recuerdo mal el nombre del evento)
Puede usar un HiddenField para almacenar FileName y luego deberá llamar a i.FindControl.

0

Creo que esta pregunta es preguntar cómo obtener datos de un repetidor en la devolución de datos y más específicamente cómo interactuar con un CheckBox que está dentro de un repetidor. Entonces, en la devolución de otro control, un ejemplo de cómo hacerlo es;

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; 
       } 
      } 
     } 
    } 
Cuestiones relacionadas