【问题标题】:How to get item click event in asp.net repeater control?如何在 asp.net 中继器控件中获取项目单击事件?
【发布时间】:2026-02-24 05:35:01
【问题描述】:

我正在使用转发器控件在我的页面上显示一些数据。

转发器项目模板有一个图像和一个标签字段。

我希望当我单击图像时,我会收到一个包含我的数据项的 id 字段的事件。

我怎样才能做到这一点?

实际上,当我单击图像时,我想转到另一个页面并想显示我的数据项的详细信息,在中继器中我只是显示简短信息。

我的中继器看起来像这样:

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

我想在点击图片时获得PhotoID

我的照片类是这样的:

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

我一直在做winform编程,刚开始web,也许很简单,但我正在努力寻找解决方案。

当我悬停图像时,我设法显示了手形光标。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    试试这个:

    <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
        }
    }
    

    【讨论】:

      【解决方案2】:

      可以使用ItemCommand的中继器控制 像这样-

      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 
      
                 }
             }
       }
      

      【讨论】:

        【解决方案3】:

        我个人认为处理此类问题的最简单方法是简单地使用ItemTemplate 生成一个常规的 html 链接,而不是在代码隐藏中做任何事情。像这样的:

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

        我知道这不是您提出的严格问题,但恕我直言,这是完成任务的最佳方法。

        【讨论】: