我有一个中继器它的结构是这样的
<asp:Repeater ID="RpAccBind" runat="server" OnItemDataBound="RpAccBind_ItemDataBound">
<ItemTemplate>
<tr id="acsryRow" runat="server">
<td data-th="Product">
<div class="prodImgMain">
<img src="../instrumentimages/<%# Eval("ProductImage") %>" alt="<%# Eval("ProductName")%>" />
</div>
</td>
<td data-th="Description">
<div class="prodDescriptionContainer">
<ul>
<li>
<span class="prdRow"><%# Eval("ProductName") %></span>
</li>
</ul>
</div>
<div class="quantityIconWrap form-group">
<span class="number-wrapper">
<asp:TextBox Text='<%# Eval("Quantity") %>' ID="txtqty" CssClass="form-control" runat="server" size="3" Width="50" onkeyup="this.value=this.value.replace(/[^0-9]/g,'');" OnTextChanged="txtQtyTextChanged" AutoPostBack="true"></asp:TextBox>
</span>
<span>
<asp:ImageButton ID="lnkAscRemove" runat="server" class="btn" OnClick="lnkRemoveClick" CommandArgument='<%# Eval("ProductId")%>' ImageUrl="../images/deleteIcon.png"></asp:ImageButton>
</span>
</div>
</td>
<td data-th="Amount" style="padding-right: 5%;">
<div class="amountColMain">
<ul>
<li><span><strong><span id="litConPrice" runat="server">$<%# Eval("ConsumerPrice") %></span></strong></span></li>
</ul>
</div>
</td>
<td></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
现在,每当txtQty为0时,我希望单击的imagebutton对应的productid。
long productId = Convert.ToInt64(((ImageButton)((RepeaterItem)txtQty.Parent).FindControl("lnkAscRemove")).CommandArgument);
它给我一个无法将HtmlTableCell强制转换为RepeaterItem的错误
任何形式的帮助将不胜感激。提前感谢
2条答案
按热度按时间hgb9j2n61#
要使用
CommandName
和CommandArgument
,您需要使用Command
事件,而不是Click
。代码隐藏
如果要从TextBox获取
ProductId
,可以将其添加为自定义属性,然后在代码隐藏中读取它。代码隐藏
ymzxtsji2#
Repeater有一个ItemCommand,用于监视Repeater元素内的按钮事件。CommandName和CommandArgument被传递给该事件。
同样重要的是Item,它表示在其中单击按钮的Repeater Item。然后,您可以使用FindControls方法查找在其中单击按钮的同一RepeaterItem的相关服务器控件对象。