2014-03-27 46 views
0

我有以下转发器,其中一些div包含信息和ImageButton。在ImageButton的点击,我想找回它包含"ID"在ImageButton上检索ASP.NET Eval点击

<asp:Repeater ID="RptPendingRequests" runat="server" onitemcommand ="RptPendingRequests_ItemCommand"> 
    //other divs here 
    <div class="LabelCustomShort" style="font-size:10px"><%#DataBinder.Eval(Container.DataItem, "ID")%></div> 
    <asp:ImageButton runat="server" ID="btnPrint" ImageUrl="~/Images/print.gif" onclick="btnPrint_Click" /></div> 
    //other divs here 
    <asp:Button runat="server" ID="btnSubmit" Text="Submit" style="float:right;" onclick="btnSubmit_Click" /> 
    </asp:Repeater> 

上的ImageButton单击我想找回在其上单击图像按钮,该项目的ID,并将其发送给另一个方法的DataBinder.Eval,如下。

protected void btnPrint_Click(object sender, RepeaterItemEventArgs e) 
    { 
     var id = e.Item.FindControl("Id") as Label; 
     DefaultClass.createPDF(Convert.ToInt32(id)); 
    } 

但是因为它是一个图像按钮RepeaterItemEventArgs只能是ImageClickEventArgs因为它的图像按钮,因此我不知道我怎么能准确地检索ID。

回答

0

添加隐藏字段与ID为转发器:

<asp:HiddenField ID="hfId" runat="server" Value='<%# Eval("ID") %>' /> 

然后在事件处理程序:

var id = ((Control)sender).Parent.FindControl("hfId") as HiddenField; 
DefaultClass.createPDF(Convert.ToInt32(id.Value)); 
+0

如果您想在'Repeater','DataGrid'或'GridView'(实现'INamingContainer'接口的那些)中找到父行,那么最好在'.Parent'上使用'.NamingContainer'。 – Bharadwaj

0

您还可以在CommandArgument添加id作为

<asp:ImageButton runat="server" ID="btnPrint" ImageUrl="~/Images/print.gif" OnClick="btnPrint_Click" CommandArgument = '<%# Eval("ID") %>'/> 

然后点击事件处理者

protected void btnPrint_Click(object sender, EventArgs e) 
{ 
    string id = (sender as ImageButton).CommandArgument; 
} 
+0

试过了,但字符串ID是空的 – rikket