我有一个包含带有OnClick的LinkButton的UserControl。 UserControl我在Repeater中使用OnItemCommand插入到单独的UserControl中。
问题是单击LinkButton会捕获Repeater OnItemCommand而不是LinkButoon OnClick。
简化代码:
MyControl.ascx
<asp:LinkButton runat="server" OnClick="lbtGeneratePDF_Click" Text="Generate pdf" />
...
OtherControl.ascx
<asp:Repeater runat="server" OnItemCommand="grvOffers_Command" ID="grvOffers">
<ItemTemplate>
<c:MyControl runat="server" />
...
</ItemTemplate>
</asp:Repeater>
OtherControl.ascx.cs
grvOffers.DataSource = GetOffers(); // Type is List<Offer>
grvOffers.DataBind();
我使用.net版本3.5
答案 0 :(得分:0)
为什么会出现问题?这就是转发器工作的方式:)只需将命令名称添加到LinkButton,而不是使用OnClick,然后在CommandName等于按钮的命令名称时从OnItemCommand调用lbtGeneratePDF_Click。您还可以使用CommandArgument传递任何其他信息,例如行ID或您需要的任何信息。
或者在LinkButton上使用OnCommand事件,而不是OnClick。
为了澄清一点,你不能在Repeater内的服务器控件上进行回发(控件的创建比平时更动态,并且在运行时绑定数据),这就是Command infrastructure存在的原因在第一位 - OnCommand回发事件传播到正确的控件。 OnClick永远不会被提升。