2011-08-02 16 views
6

Estoy usando un control de repetidor para mostrar algunos datos en mi página.¿Cómo obtener el evento de clic de elemento en el control de repetidor asp.net?

La plantilla del elemento de repetidor tiene una imagen y un campo de etiqueta.

Quiero que cuando haga clic en la imagen, aparezca un evento que contenga el campo de identificación de mi elemento de datos.

¿Cómo puedo lograrlo?

En realidad, cuando hago clic en la imagen quiero ir a otra página y quiero mostrar información detallada de mi elemento de datos, en el repetidor solo estoy mostrando información breve.

Mi repetidor se ve así:

<asp:Repeater ID="itemRepeater" runat="server" OnItemCreated="itemRepeater_ItemCreated" > 

      <ItemTemplate> 
       <tr> 
        <td colspan="2"> 
         <asp:Image ID="phImage" runat="server" ImageUrl='<%#"~/ImageHandler.ashx?id=" + DataBinder.Eval(Container.DataItem, "PhotoID")%>' /> 
        </td> 
        <td> 
         <asp:Label ID="lblImageName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' /> 
        </td> 
       </tr> 
      </ItemTemplate> 
</asp:Repeater> 

quiero conseguir PhotoID en el caso cuando hago clic en la imagen.

Mi clase de foto se ve así:

public class PhotoDC 
    {  
     public byte[] ImagebyteArray { get; set; }  
     public string Name { get; set; } 
     public int PhotoID { get; set; } 
    } 

que he estado haciendo la programación WinForm web acaba de empezar, tal vez es fácil, pero yo m luchando para encontrar una solución.

De alguna manera logré mostrar el cursor de mano cuando sobrevivo la imagen.

Respuesta

11

Prueba esto:

<asp:Repeater ID="itemRepeater" runat="server" OnItemCreated="itemRepeater_ItemCreated" >  
    <ItemTemplate> 
     <tr> 
     <td colspan="2"> 
      <asp:ImageButton ID="phImage" runat="server" ImageUrl='<%#"~/ImageHandler.ashx?id=" + DataBinder.Eval(Container.DataItem, "PhotoID")%>' OnCommand="Image_Click" CommandName="ImageClick" CommandArgument='<%# Eval("PhotoID") %>' /> 
     </td> 
     <td> 
      <asp:Label ID="lblImageName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' /> 
     </td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 

protected void Image_Click(object sender, CommandEventArgs e) 
{ 
    if (e.CommandName == "ImageClick"){ 
     //e.CommandArgument --> photoid value 
     //Do something 
    } 
} 
0

Personalmente, creo que la forma más sencilla de manejar algo como esto es simplemente usar el ItemTemplate para generar un enlace html normal, en lugar de hacer algo en el código subyacente. Algo como esto:

<asp:Repeater ID="itemRepeater" runat="server" OnItemCreated="itemRepeater_ItemCreated" > 

     <ItemTemplate> 
      <tr> 
       <td colspan="2"> 
        <a href="/Details.aspx?id=<%=DataBinder.Eval(Container.DataItem, "PhotoID")%>"> 
        <asp:Image ID="phImage" runat="server" ImageUrl='<%#"~/ImageHandler.ashx?id=" + DataBinder.Eval(Container.DataItem, "PhotoID")%>' /> 
        </a> 
       </td> 
       <td> 
        <asp:Label ID="lblImageName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' /> 
       </td> 
      </tr> 
     </ItemTemplate> 

Sé que esto no es estrictamente la pregunta que hiciste, pero en mi humilde opinión es el mejor enfoque para llevar a cabo la tarea.

3

Usted puede utilizar ItemCommand de control del repetidor como esto -

protected void itemRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     if (e.CommandName == "img_Click") // check command is cmd_delete 
      { 
      // get you required value 
      int CustomerID = Convert.ToInt32(e.CommandArgument); 

      //Write some code for what you need 

      } 
     } 
} 
Cuestiones relacionadas