如何在asp.net转发器控件中获取项目点击事件?

时间:2011-08-02 19:11:26

标签: asp.net

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

转发器项目模板包含图像和标签字段。

我希望当我点击图片时,我会收到一个包含我的数据项的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编程刚开始上网,也许这很容易,但我很难找到解决方案。

当我悬停图像时,我以某种方式设法显示手形光标。

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:4)

您可以使用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 

           }
       }
 }

答案 2 :(得分: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>  

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