如何在ASP.NET Repeater控件中获取项目点击事件?

8
我正在使用一个重复控件在页面上展示一些数据。
重复项模板包含一个图像和一个标签字段。
我希望当我点击图像时,能够获取包含我的数据项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,虽然看起来比较简单,但是我却很难找到解决方案。

不过,我成功地实现了当鼠标悬停在图片上时显示手型光标。

3个回答

14

试试这个:

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

4
你可以像这样使用repeater控件的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 

           }
       }
 }

0

个人认为处理这种情况最简单的方法是使用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>  

我知道这不完全是你问的问题,但在我看来,这是完成任务的最佳方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接