2014-03-27 5 views
0

정보가 포함 된 div와 ImageButton이있는 다음 중계기가 있습니다. ImageButton의 클릭에 나는 내가 이미지 버튼을 클릭 한되는 항목의 ID를 검색하고 다른 방법으로 보내 싶습니다 클릭하여 ImageButton 켜기 "ID"ImageButton에서 ASP.NET 평가판을 가져옵니다.

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

들어있는 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
또한

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

로 그리고 클릭 이벤트에 CommandArgument에 ID를 추가 할 수 있습니다

처리기

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

시도했지만 문자열 ID가 비어 있습니다. – rikket